【问题标题】:Hibernate delete and update休眠删除和更新
【发布时间】:2013-07-28 20:28:36
【问题描述】:

我有一个要更新的 java 对象。我使用 SaveOrUpdate 方法来做到这一点。它适用于更新孩子,但我的要求存在问题。

因为如果一个孩子被删除,我需要从数据库中删除一个孩子。

请任何人有一个好主意来实现这个?

例如:-

项目与人是一对多的关系。

项目有一个类似的属性,

  class Project { 
    long id;
    Set<People> people;
    ......
 }

public void updateProject(Project project) {

    try {
        getCurrentSession().saveOrUpdate(project);
    } catch (Exception ex) {
        logger.error(ex);
    }

项目对象包含人员集,但从中删除了一些人员 ID。

我需要通过删除不需要的人员 ID 来更新项目

谢谢

【问题讨论】:

    标签: java hibernate oracle11g hibernate-mapping


    【解决方案1】:

    我假设你已经在你的项目实体上启用了级联,所以我猜你需要将 orphanRemoval 属性添加到关系中。 您的案例示例是:

    @OneToMany(cascade={CascadeType.ALL}, orphanRemoval=true)
    

    【讨论】:

    • 感谢您的回答。我有一个小问题。如果当我要更新孩子时,有人可以添加新孩子并分配给项目。在那种情况下,如果我们要使用它,会发生什么?新加的也删了?
    • 我不太确定我是否完全理解您的问题,但是,只要您将新的孩子添加到人员集中的集合中并且您执行项目的 saveOrUpdate 一切都应该没问题。由于级联,新的孩子将被保存
    【解决方案2】:

    参考代码: 使用 'all-delete-orphan' 配置级联以删除孤立数据...

    <hibernate-mapping>
          <class name="User" table="UTABLE" >
              <id name="UID" column="UID"/>
              <property name="Name"  column="F_Name"/>
              <set name="phones"   table="PHONE_NUMBERS" cascade="all-delete-orphan" lazy="true">
              <key column="UID"/>
                <one-to-many class="PhoneNumber"  />
             </set>
          </class>
      </hibernate-mapping>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-21
      • 2011-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-04
      • 1970-01-01
      相关资源
      最近更新 更多