当我使用带有grails的hsqldb时,似乎每个域类都有自己的id自动增量计数器。当我创建一个类型为a的对象时,它获得ID = 1。然后,当我创建一个b类型的对象时,它获得ID = 1。当我再次创建一个类型为a的对象时,它会得到ID = 2.
这就是我期望的行为。
当我使用oracle db时,似乎只有一个全局计数器用于所有域类的所有ID。当我创建一个类型为a的对象时,它获得ID = 1。然后,当我创建类型为b的对象时,它获得ID = 2。当我再次创建一个类型为a的对象时,它获得ID = 3。
我该如何更改?
答案 0 :(得分:4)
Grails正在使用hibernate,默认情况下,hibernate只使用一个序列来生成所有id。如果每个表需要一个序列,则可以编辑Config.groovy。添加以下行:
grails.gorm.default.mapping = {id generator:'identity'}
答案 1 :(得分:2)
如果您想要更好地控制数据库的生成/更新方式,那么最好使用数据库迁移,然后让Hibernate管理它。我们使用Liquibase,它非常易于使用和灵活,并且已经有Grails plug in。此外,如果我没有弄错,数据库迁移将集成在1.4版的Grails核心中,这样您就可以使用模式迁移而无需安装任何插件。