java - 保存/更新具有多对多关系的 Hibernate 实体

标签 java hibernate save

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

例如,Project 实体与Person 有关系。 PersonProject 是多对多的关系。一个项目可以属于多个类别,因此也存在多对多关系。

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

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

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

最佳答案

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

@OneToMany(cascade = CascadeType.ALL)

关于java - 保存/更新具有多对多关系的 Hibernate 实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9249374/

相关文章:

java - 为什么我不被迫在这里捕获异常?

java - 使用 hibernate 和 maven 从数据库生成 Java 类 - AnnotationConfiguration 丢失?

java - Spring Boot Entitymanager 无法可靠地处理 'persist' 调用

matlab - 保存函数的输出

php - 只从mysql生成一次数据然后保存?

java - 使用 HTML5 文件 API 将文件上传到 RESTful Web 服务

java - hibernate 中的持久化是什么?

java - 结构化 Firestore Android 可获取多个位置检查

mysql - Spring 3 - Hibernate 3 - 查询多个 MySQL 数据库

eclipse - 如何在 Eclipse 中为 Ctrl+S 事件添加 Hook ?