J'ai un « chien » entitiy avec un @Id et un @TableGeneratorJPA @TableGenerator partagé entre plusieurs entités
...
@TableGenerator(table = "seq", name = "dog_gen", pkColumnName = "seq_name", valueColumnName="seq_val")
@Id @GeneratedValue(strategy = GenerationType.TABLE, generator = "dog_gen")
private Long id;
...
Est-il possible de réutiliser le même générateur de table (dog_gen) dans une autre entité? Je veux garder la même séquence id dans deux entités indépendantes, dire
chien = 1, chien = 2, chien = 3, cat = 4, cat = 5, chien = 6 et ainsi de suite ...
Les deux entités ne partagent pas une super-classe commune pour implémenter une sorte d'héritage avec la propriété id.
Si j'ajoute le @GeneratedValue (générateur = « dog_gen ») sur mon entité chat, en omettant la déclaration @TableGenerator renvoie une exception en disant qu'il ne peut pas trouver le générateur lors du démarrage du contexte.
Caused by: org.hibernate.AnnotationException: Unknown Id.generator: dog_gen
at org.hibernate.cfg.BinderHelper.makeIdGenerator(BinderHelper.java:413)
at org.hibernate.cfg.AnnotationBinder.bindId(AnnotationBinder.java:1795)
at org.hibernate.cfg.AnnotationBinder.processElementAnnotations(AnnotationBinder.java:1229)
at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:733)
at org.hibernate.cfg.AnnotationConfiguration.processArtifactsOfType(AnnotationConfiguration.java:498)
at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:277)
Je l'ai essayé ... il semble fonctionner seulement parce que la taille d'allocation est 1. Mais les générateurs effectivement séparés sont créés et travaillent séparément. Si vous choisissez une taille d'allocation supérieure à 1, vous verrez que vous aurez des plages d'identifiants différentes pour chaque entité. (En utilisant Hibernate 3.6 ici, peut-être que ça marche mieux avec 4.x?) –