JPA @TableGenerator在多个实体之间共享
我有一个带有@Id和@TableGenerator的’dog’Entitiy
... @TableGenerator(table = "seq", name = "dog_gen", pkColumnName = "seq_name", valueColumnName="seq_val") @Id @GeneratedValue(strategy = GenerationType.TABLE, generator = "dog_gen") private Long id; ...
有没有办法在其他实体中重用相同的表生成器(dog_gen)? 我想在两个独立的实体中保持相同的id序列
dog = 1,dog = 2,dog = 3,cat = 4,cat = 5,dog = 6等等……
两个实体不共享一个公共超类,以使用id属性实现某种inheritance。
如果我在我的cat实体上添加@GeneratedValue(generator =“dog_gen”) ,省略@TableGenerator声明会抛出一个exception,说它在启动上下文时找不到生成器。
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)
确实,这并不是我在阅读@TableGenerator
的javadoc之后所期待的:
此批注定义了主键生成器,当为
GeneratedValue
批注指定GeneratedValue
器元素时,可以通过名称引用该GeneratedValue
。 可以在实体类或主键字段或属性上指定表生成器。 生成器名称的范围对于持久性单元是全局的 (跨所有生成器类型)。
也许我没有正确解释事情(JPA规范的第9.1.38节没有告诉我们更多)但我希望能够从@GeneratedValue
另一个实体引用生成器名称。
无论如何,以下似乎工作。 在Dog
实体中:
@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;
在Cat
,嗯,同样的:
@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;
- 如何级联删除作为jpa实体一部分的集合?
- Hibernate升级到5.2 – 创建会话工厂并替换PersistentClass以获取实体类属性
- 什么是在hibernate实体和数据传输对象之间进行转换的好模式?
- java.lang.IllegalStateException:具有@ManyToMany 3实体的同一实体的多个表示forms
- 即使使用C3P0 +显式session.close(),Hibernate连接也不会关闭
- 为什么@OneToMany在Hibernate中不能inheritance
- 使用TIMESTAMPDIFF和JPA条件查询并将hibernate作为提供者
- Hibernate:Hibernate总是使用对象代理吗?
- JPA 2.0:什么是javax.validation。*包?