我正在进行重构,我必须将我的类从 hibernate xml 更改为注释(首选 JPA 注释,但 hibernate 也可以)。我的一个实体使用了 hibernate idbag 功能以及元素功能和连接表。
hibernate XML:
<class name="com.my.package.EntityA" table="table_a">
<id name="id" column="table_a_id" type="long" unsaved-value="null">
<generator class="sequence">
<param name="sequence">table_a_seq</param>
</generator>
</id>
<idbag name="entityBIds" table="table_a_b" cascade="all" lazy="false">
<collection-id column="table_a_b_id" type="long">
<generator class="org.hibernate.id.SequenceGenerator">
<param name="sequence">table_a_b_seq</param>
</generator>
</collection-id>
<key column="fk_table_a_id" />
<element column="fk_table_b_id" type="long"/>
</idbag>
</class>
该类如下所示:
public class EntityA {
Long id;
Collection<Long> entityBIds;
}
架构:
table_a
table_a_id number(13,0)
table_b
table_b_id number(13,0)
table_a_b
table_a_b_id number(13,0)
fk_table_a_id number(13,0)
fk_table_b_id number(13,0)
我如何使用注释来实现这个?请注意,这是一个非常复杂的系统,我希望最大限度地减少除了注释之外必须进行的更改。
最佳答案
您想要的是与连接表的一对多关系。 请参阅https://en.wikibooks.org/wiki/Java_Persistence/OneToMany §1.5 连接表
您的表模型对于两个表都不实用 table_a
和table_a_b
。但我想改变它会付出高昂的代价。
我希望你的java模型更加灵活......
定义EntityB
只有 Long id
。在 EntityA
有一个Collection<EntityB> entityBs
并调整您的 getEntityBIds/setEntityBIds/addEntityBId/等的实现来访问它并根据需要进行转换。当然希望田野entityBIds
是私有(private)的,因此不在实体之外使用。
关于java - 如何在注释中使用元素实现 idbag?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49414157/