我想映射我的域对象以使用新的Oracle 12c身份类型主键,AKA在其他一些系统中自动递增。为身份PK配置适用于Oracle 12c的Grails 3.0.9?
Hibernate 4没有Oracle12cDialect,它只有Oracle10gDialect。
Oracle10gDialect有一个名为supportsIdentityColumns()的方法,它被硬编码为返回false,因此使用generator生成“Gage”域对象:“identity”会导致错误,指出Oracle10gDialect不支持标识生成器。
我不能使用GORM选择生成器,因为我没有辅助唯一键,而且我不能使用Hibernate生成的键,因为随后Hibernate和其他(外部)插入到表中会生成重叠键。
现有Oracle 12C DDL的实施例:
create table person (
id number(10,0) generated by default as identity,
version number(10,0) not null,
home_address_id number(10,0),
name varchar(255) not null,
primary key (id)
);
GORM对象:
class Person {
String name
Address homeAddress
static mapping = {
id column: 'person_key', generator: 'identity'
}
static constraints = {
homeAddress nullable: true
}
}
在存储器DB结果(运行完美):
Hibernate: create table person (person_key bigint generated by default as identity, version bigint not null, home_address_id bigint, name varchar(255) not null, primary key (person_key))
Hibernate: alter table person add constraint FK_bemy93e8a8i6nknj4n21m6fub foreign key (home_address_id) references address
Hibernate: insert into person (person_key, version, home_address_id, name) values (null, ?, ?, ?)
Oracle数据库查询结果(碎):
org.hibernate.MappingException: org.hibernate.dialect.Oracle10gDialect does not support identity key generation
如何获得的Grails 3.0.9与上面的Oracle表定义的工作?
我知道,我很喜欢使用Hibernate 5,但是我不认为Grails支持Hibernate 5,但它不是吗?我能找到的插件的最新版本是这样的:org.grails.plugins:hibernate:4.3.10.5。 – DAC
我们正在尝试编写我们自己的自定义方言。我会很快回复这个结果。 – DAC
实现了我们自己的Oracle 12c方言,它不起作用。当我们获得自定义方言并运行后,很明显Grails Hibernate插件的其他部分还需要做其他更改。 – DAC