java - 如何在注释中使用元素实现 idbag?

标签 java hibernate jpa hibernate-mapping

我正在进行重构,我必须将我的类从 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_atable_a_b 。但我想改变它会付出高昂的代价。

我希望你的java模型更加灵活...... 定义EntityB只有 Long id 。在 EntityA有一个Collection<EntityB> entityBs并调整您的 getEntityBIds/setEntityBIds/addEntityBId/等的实现来访问它并根据需要进行转换。当然希望田野entityBIds是私有(private)的,因此不在实体之外使用。

关于java - 如何在注释中使用元素实现 idbag?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49414157/

相关文章:

java - 玩2.5 Ebean和JPA : NoSuchMethodError

java - 有没有办法将 HibernateException 转换为其他内容,然后将 Spring 中的 DataAccessException 转换为其他内容

java - 在 JPA 实体中,如何定义 getter 上使用的 SQL?

java - 如何在 java 中以周期性间隔执行操作?

java - 在 Spring MVC 中,当 "get by id"找不到项目时,如何优雅地处理 Validate.notNull IllegalArgumentException?

java - Hibernate:实体管理器工厂的问题

java - 静态方法中的 LazyInitializationException

Java IO : Why does the numerical representation of line feed appear on the console when reading from stdin?

java - 如何获取对 ScheduledThreadPoolExecutor 的 Future 的引用

java - Java中初始化一个Vector对象,总是不对