java - JPA @TableGenerator shared between multiple entities -


i have 'dog' entitiy @id , @tablegenerator

... @tablegenerator(table = "seq", name = "dog_gen", pkcolumnname = "seq_name", valuecolumnname="seq_val") @id @generatedvalue(strategy = generationtype.table, generator = "dog_gen") private long id; ... 

is there way reuse same table generator (dog_gen) in other entity? want keep same id sequence in 2 independent entities, say

dog=1, dog=2, dog=3, cat=4, cat=5, dog=6 , on...

both entities don't share common superclass implement kind of inheritance id property.

if add @generatedvalue( generator="dog_gen") on cat entity, omitting @tablegenerator declaration throws exception saying can't find generator when starting context.

caused by: org.hibernate.annotationexception: unknown id.generator: dog_gen @ org.hibernate.cfg.binderhelper.makeidgenerator(binderhelper.java:413) @ org.hibernate.cfg.annotationbinder.bindid(annotationbinder.java:1795) @ org.hibernate.cfg.annotationbinder.processelementannotations(annotationbinder.java:1229) @ org.hibernate.cfg.annotationbinder.bindclass(annotationbinder.java:733) @ org.hibernate.cfg.annotationconfiguration.processartifactsoftype(annotationconfiguration.java:498) @ org.hibernate.cfg.annotationconfiguration.secondpasscompile(annotationconfiguration.java:277)  

indeed , not expecting after reading javadoc of @tablegenerator:

this annotation defines primary key generator may referenced name when generator element specified generatedvalue annotation. table generator may specified on entity class or on primary key field or property. the scope of generator name global persistence unit (across generator types).

maybe i'm not interpreting things correctly (the section 9.1.38 of jpa spec doesn't tell more) expecting able reference generator name entity in @generatedvalue.

anyway, following seems work. in dog entity:

@tablegenerator(table = "myseq", name = "dog_gen", pkcolumnname = "seq_name",        valuecolumnname = "seq_val", pkcolumnvalue = "dog", allocationsize = 1) @id @generatedvalue(strategy = generationtype.table, generator = "dog_gen") private long id; 

and in cat, well, same:

@tablegenerator(table = "myseq", name = "dog_gen", pkcolumnname = "seq_name",        valuecolumnname = "seq_val", pkcolumnvalue = "dog", allocationsize = 1) @id @generatedvalue(strategy = generationtype.table, generator = "dog_gen") private long id; 

Comments

Popular posts from this blog

javascript - Enclosure Memory Copies -

php - Replacing tags in braces, even nested tags, with regex -