J'essaie de mapper mes objets de domaine pour utiliser les nouvelles clés primaires de type d'identité Oracle 12c, auto-incrémentation AKA dans certains autres systèmes.Configurer Grails 3.0.9 pour Oracle 12c avec PK d'identité?
Hibernate 4 n'a pas Oracle12cDialect, il a seulement Oracle10gDialect. Oracle10gDialect a une méthode appelée supportsIdentityColumns() qui est codée en dur pour renvoyer false, mappant ainsi mon objet domaine GORM avec le générateur: "identity" entraîne une erreur indiquant que Oracle10gDialect ne prend pas en charge le générateur d'identité.
Je ne peux pas utiliser le générateur de sélection GORM car je n'ai pas de clé unique secondaire et je ne peux pas utiliser de clé Hibernate parce qu'Hibernate et d'autres insertions (externes) dans les tables génèrent des chevauchements.
Exemple d'Oracle Existant 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 Objet:
class Person {
String name
Address homeAddress
static mapping = {
id column: 'person_key', generator: 'identity'
}
static constraints = {
homeAddress nullable: true
}
}
En mémoire DB Résultat (Travaux parfait):
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, ?, ?, ?)
Résultat Oracle DB (Broken):
org.hibernate.MappingException: org.hibernate.dialect.Oracle10gDialect does not support identity key generation
Comment puis-je obtenir Grails 3.0.9 de travailler avec la définition ci-dessus de la table Oracle?
Je sais, j'aimerais utiliser Hibernate 5, mais je ne pense pas que Grails a le support pour Hibernate 5 encore le fait? La dernière version du plugin que je peux trouver est celle-ci: org.grails.plugins: hibernate: 4.3.10.5. – DAC
Nous essayons d'écrire notre propre dialecte personnalisé. Je vais répondre avec le résultat de cela sous peu. – DAC
Implémenter notre propre dialecte Oracle 12c et cela n'a pas fonctionné. Lorsque nous avons mis en place le dialecte personnalisé, il est devenu clair qu'il y a d'autres changements qui doivent être faits dans d'autres parties du greffon Grails Hibernate. – DAC