Автоинкрементные поля, отличные от Id в Grails - PullRequest
7 голосов
/ 08 ноября 2011

Я новичок в Grails. В моем доменном объекте есть поле, которое я определяю как String.

String ponum

Когда я нажимаю первый раз на странице создания, поле «ponum» должно отображать 0001, а затем оно должно сохраняться в базе данных. чтобы сохранить в базе данных. Каждый раз, когда я нажимаю на странице создания, поле «ponum» должно автоинкрементироваться и сохранять его в базе данных. Я Google, но я не получил никакого документа спасибо

Ответы [ 2 ]

6 голосов
/ 08 ноября 2011

Когда все равно получают идентификатор (если вы используете обычные rdbms со стандартным идентификатором genaerator), почему бы не притвориться, что есть переменная ponum, основанная на идентификаторе?

Просто добавьте геттер вкласс вашего домена:

class Page {
  String getPonum() {
    String.format( "%04d", id )
  }
}
1 голос
/ 08 ноября 2011

Согласно этому ответу , невозможно использовать генераторы гибернации (те, которые используются для идентификаторов), чтобы сделать это.Если вам действительно нужно использовать генераторы Hibernate, в ответе также описывается обходной путь.

В вашем случае вы можете использовать перехватчик для генерации свойства ponum при вставке нового объекта:

class Yours {
  int ponum

  def beforeInsert() {
    def lastPonum = Book.list([sort: 'ponum', order:'desc', max: 1])
    if(lastPonum)
      ponum = (lastPonum.pop().ponum as int) + 1 as String
    else
      ponum = '0'
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...