【问题标题】:Saving/updating Hibernate Entities with many-to-many relationships保存/更新具有多对多关系的休眠实体
【发布时间】:2012-03-04 04:43:35
【问题描述】:

我目前正在尝试解决一个问题,即我在 Java Swing 应用程序中使用 Hibernate 4,而实体之间存在多个多对多关系。

例如,Project 实体与Person 有关系。 PersonProject 具有多对多的关系。一个项目可以有很多类别,所以也存在多对多的关系。

Person *-----* Project *-----* Category

当我有一个摇摆表单时,我可以在其中编辑关于 PersonProjectCategory 的所有信息,它涉及当用户点击“保存”按钮时保存 Person,保存/更新 Person 的可能解决方案是什么?

void savePerson(Person p){
   Session sess = factory.openSession();
   Transaction tx = null;
   try {
       tx = sess.beginTransaction();

       // steps to be done

       tx.commit();
   }
   catch (RuntimeException e) {
       if (tx != null) tx.rollback();
   }
   finally {
       sess.close();
   }
}

因为在 Person 内部还有一个 collectionProjects 和一个 collection Project 中的 Categoy 可能已更改,我是否必须进行递归类型的保存(首先保存/更新所有子- 集合包含的实体,然后保存/更新 Person 实体)还是我只需要保存 Person 实体,Hibernate 将保存/更新机制应用于以 Person 为根的整个实体树?有什么最佳做法吗?

【问题讨论】:

    标签: java hibernate save


    【解决方案1】:

    看看CascadeType。您可以使用关系注释中的 CascadeType 直接设置保存/更新操作的行为:

    @OneToMany(cascade = CascadeType.ALL)
    

    【讨论】:

    • 感谢您的提示,此注释是实现上述行为的关键。但是我花了几周的时间才发现,需要另一个可能具有最愚蠢命名的注释才能使其正常工作。还需要属性“inverse=false”,简单地代表关系的负责方。
    猜你喜欢
    • 1970-01-01
    • 2015-08-25
    • 2016-04-04
    • 1970-01-01
    • 2019-04-24
    • 1970-01-01
    • 1970-01-01
    • 2015-12-22
    相关资源
    最近更新 更多