2016-09-16 3 views
-2

У меня есть один столбец с именем invoice_number в моей базе.Извлечение значения из базы данных в Grails

class Customer { 
    String name 
    int invoiceNumber 

    static constraints = { 
     name(blank: false) 
     invoiceNumber(unique: true) 
    } 
} 

В файле index.gsp нет поля для invoice_number.

<g:form controller="customer"> 
    Name:<br> 
    <g:textField name="name"></g:textField><br> 
    <g:actionSubmit value="Submit" action="Save"></g:actionSubmit><br> 
</g:form> 

Я хочу, чтобы генерировать один номер счета-фактуры и увеличить его с разницей в 5. Например, когда первый клиент отправляет форму, номер счета-фактуры может быть сгенерирована в 105. Когда второй клиент подает форму, счет-фактура число должно быть 110. Они должны быть сохранены в базе данных, и они должны быть уникальными. Затем я хочу получить номер счета из базы данных для клиента, который отправляет форму, а затем передать этот номер счета в другой файл gsp.

Как я могу это сделать?

+1

Умм ... так что клиент может иметь только 1 счет-фактуру? Когда-либо? И есть ли реальная причина для увеличения количества счетов на 5? Что происходит с 106..109? – railsdog

+0

Как указано @railsdog, почему вы хотите увеличить номер счета на 5? Вы можете просто добавить его на 1, и он все равно может быть уникальным, верно? Также из вашего класса домена выглядит, что для клиента будет отображаться только один счет-фактура. Это бизнес-логика? –

+0

все здесь кажется просто неправильным. Вот почему вы не получаете хороших ответов. как упоминал railsdog - 1 пользователь и 1 счет-фактура кажутся странными. вы должны создать счет-фактуру в качестве класса и добавить «один-ко-многим» пользователям (если вам нужно больше 1 счета-фактуры). и число может быть функцией домена 'afterInsert', которая идет' invoiceNumber = id * 5 + 100' или что-то в этом роде. (но будет работать только в том случае, если у вас есть счета-фактуры в виде отдельного класса. –

ответ

0

Вы должны добавить логику генерации/приращениемinvoiceNumber в controller's action, к которому вы даете вызов на form submit.

0

Возможно, вы начали свой путь (но я все еще не получаю 1 счет на часть клиента или увеличиваю 5).

Да, как упоминалось Абхинанданом, вы можете поместить логику создания идентификатора в контроллер, но более подходящим маршрутом может быть создание настраиваемого генератора ключей, и укажите ваш класс, чтобы использовать этот генератор для идентификаторов записи.

Предположим, мы имеем:

package tester2 
class Custo { 
    String id // string just to show it can be anything 
    String name 

    // tell GORM about your id attribute, and setup your 'id' column 
    // to use a custom id generator function 
    static mapping = { 
     id column:"id", generator:"tester2.CustomIdGenerator" 
    } 
} 

затем в ИПВ/заводной/tester2/CustomIdGenerator.groovy

package tester2 
import org.hibernate.id.IdentifierGenerator 
import org.hibernate.engine.spi.SessionImplementor 

class CustomIdGenerator implements IdentifierGenerator { 
    public synchronized Serializable generate(SessionImplementor session, Object obj) { 
     // here's where you would have to access some persistent store to 
     // remember your last generated ID, fetch the last value, add 5, 
     // and store that new value to be ready for the next call 
     // -- don't know what DBMS you intend to use, but some have 
     // sequence support that will let you tinker with the starting 
     // point and increment. Maybe it's a simple as setting up a 
     // customized sequence and asking for nextVal() 
     // 
     // for this example, I just use a random UUID 
     return UUID.randomUUID().toString() 
    } 
}