Hibernate JPA值删除OneToMany关系



我有两个表,其中有一个OneToMany, MnatToOne关系。

当我将AlarmnotifyEmailEntity实例添加到alarmnotifyEmailEntityList对象中并更新AlarmnotifyEmailConfEntity实例时,值被正确保存到数据库中。

但我不能做同样的事情时,删除alarmnotifyEmailEntityList的一个项目。我确信值是从alarmnotifyEmailEntityList中删除的,但它并没有反映这个变化到数据库

    @Entity(name ="alarmnotify_email_conf")
    @Table(name = "alarmnotify_email_conf")
    public class AlarmnotifyEmailConfEntity implements Serializable {
    @OneToMany(mappedBy = "alarmnotifyEmailConfRef",cascade=CascadeType.ALL)
        private List<AlarmnotifyEmailEntity> alarmnotifyEmailEntityList;
    }//end of Class
    @Entity (name ="alarmnotify_email")
    @Table(name = "alarmnotify_email")
    public class AlarmnotifyEmailEntity implements Serializable {
     @JoinColumn(name = "alarmnotify_email_conf_ref", referencedColumnName = "id")
        @ManyToOne
        private AlarmnotifyEmailConfEntity alarmnotifyEmailConfRef;
    }end of Class

我只调用下面的语句来更新。

JPAManager.getJPAManagerInstance () .update (alarmnotifyemailconf);

 public Object update(Object o) {
  try {
     tx.begin();
     EntityManager em = getEntityManager();          
     System.out.println("updating object:" + o);
     o = em.merge(o);
     em.close();
     tx.commit();
     System.out.println("closed and commited merge operation");
     return o;
  }
  catch (Exception e) {
     e.printStackTrace();
  }
  return o;

}

根据我的经验,级联只适用于相同的操作。如果我们保存parent,那么children也会用update保存相同的情况。但我认为,当你想要删除其中一个子节点时,我们必须使用实体管理器显式地删除,而不能只是合并父节点,并期望将级联删除到子节点。

我已经找到了jpa从集合中删除孩子的答案。结果添加orphanRemoval=true解决了这个问题。

@ entity (name = " alarmnotify_email_conf ")@Table(name = "alarmnotify_email_conf")公共类AlarmnotifyEmailConfEntity实现Serializable {

@OneToMany (mappedBy ="alarmnotifyEmailConfRef",级联= CascadeType。, orphanRemoval = true )private List alarmnotifyEmailEntityList;

}//end of Class

最新更新