java - Hibernate,在单个操作中保存集合属性

标签 java spring hibernate jakarta-ee hibernate-mapping

我需要更好地了解 hibernate 的这种行为,并且想知道我是否可以对此事有所了解。 有两个对象,ContactAction 具有一对多关系,即一个 Contact 可以有多个 Action与他们有关。 我想要了解的是,当我存储 Contact 时,如何存储 Action 的集合(这是 Contact 的属性)到数据库。 目前我正在做的是先存储Contact,然后存储Action。 以下是我的代码: 模型对象:

public class Contact  implements Serializable{
    private Integer contactID;
    private String givenName;
    private String familyName;
    private Set<Action> actionSet = new HashSet<Action>();
}
public class Action  implements Serializable{
    private Integer actionID;
    private String actionNote;
    private Contact contact;
}

hibernate 映射:

<hibernate-mapping package="com.hibernate.model" schema="hibernatedb">
<class name="Contact" table="CONTACT">
    <id column="CONTACT_ID" length="500" name="contactID">
        <generator class="increment" />
    </id>
    <property column="GIVEN_NAME" generated="never" lazy="false" length="100" name="givenName" />
    <property column="FAMILY_NAME" generated="never" lazy="false" length="100" name="familyName" />
    <!-- one to many mapping with Action -->
    <set inverse="true" lazy="false" name="actionSet" sort="unsorted">
        <key column="CONTACT_ID" />
        <one-to-many class="com.hibernate.model.Action" />
    </set>

</class>
</hibernate-mapping>

 <hibernate-mapping package="com.hibernate.model" schema="hibernatedb">
<class name="Action" table="ACTION">
    <id column="ACTION_ID" length="500" name="actionID">
        <generator class="increment" />
    </id>
    <property column="ACTION_NOTE" type="string" name="actionNote" />
    <!-- many to one mapping with Contact -->
    <many-to-one name="contact" column="CONTACT_ID"
        class="com.hibernate.model.Contact" lazy="false" cascade="save-update" />
</class>
</hibernate-mapping>

这就是我目前尝试存储它的方式:

public class ContactServiceImpl implements ContactService{
    @Override
    public void addContacts(Contact contact) {

        contactDAO.addContact(contact);//saving the contact;
        if((contact.getActionSet()!=null)&&(contact.getActionSet().size()>0)){
            actionService.addAllActions(contact,contact.getActionSet());//saving actions, associated with the contact
        }

    }
}

看,有两个操作导致保存 Action,因为它们是 Contact 的属性,并且我相信当 Contact 保存后,Action 的集合也必须保存。 请让我知道正确的做法。谢谢

最佳答案

尝试设置

<set cascade="all"....

这样,当您在联系人实体上调用保存时,hibernate 将保存您的操作集。

参见this回答以获取更多详细信息。

另请参阅the documentation .

关于java - Hibernate,在单个操作中保存集合属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15508696/

相关文章:

Spring Boot @Scheduled cron

hibernate - 无法设置 Hibernate 中的通用生成器参数

java - 如何处理 hibernate 生成的唯一字段?

java - 相当于 spring data jpa 中的 `set @variable = 0`

java - 无法更新卡中显示的值 - Android 的 Cardslib 库

java - Hibernate条件查询不遵守多重限制

java - 如何使用java将三个表连接成一个表以及set方法值应该写在哪里

java - 在从托管 bean 加载页面期间设置 jsf InputSecret 的值

java - jackson 循环依赖

java - 无法获取 JdbcConnectionException : The BUFFERDIR connection property is invalid