Grails 3 / GORM 6 / SQL Server - Генератор для столбца не первичный ключ - PullRequest
0 голосов
/ 15 ноября 2018

у меня есть стол

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.

Какое правильное сопоставление использовать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...