у меня есть стол
class MyTable {
Long revisionGroup
Integer revisionNum = 1
...
static constraints = {
revisionGroup unique: 'revisionNum'
}
static mapping = {
revisionGroup generator: 'auto'
}
}
Я хочу иметь возможность сделать следующее:
//Save new data.
MyTable myTable1 = new MyTable().save()
//Do "soft update" of data by saving new revision.
MyTable myTable2 = new MyTable(revisionGroup: myTable1.revisionGroup, revisionNum: myTable1.revisionNum + 1).save()
//Save new data.
MyTable myTable3 = new MyTable().save()
Ожидаемые данные:
myTable1: id = 1, revisionGroup = 1, revisionNum = 1
myTable2: id = 2, revisionGroup = 1, revisionNum = 2
myTable3: id = 3, revisionGroup = 2, revisionNum = 1
К сожалению, возникает ошибка проверки при запуске new MyTable().save()
, что revisionGroup имеет значение null.
Я знаю, что это можно сделать, сделав revisionGroup String и используя GUID, но мне нужно использовать Long, который автоматически увеличивается.
После некоторого копания выглядит, что это традиционно невозможно: Hibernate JPA Sequence (не-Id) .
В комментариях к принятому ответу лучшим решением для PostgreSQL является @Column(columnDefinition="serial")
, что переводится здесь в отображение revisionGroup sqlType: 'serial'
. Однако я использую SQL Server, а при использовании сопоставления revisionGroup sqlType: 'BIGINT IDENTITY(1,1)'
Grails пропускает создание всей таблицы MyTable.
Какое правильное сопоставление использовать?