2013-01-16 172 views
0

我有两个表,其中有一个OneToMany,MnatToOne关系。休眠JPA值删除OneToMany关系

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

Bu删除了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; 

}

+0

你有没有尝试添加级联= CascadeType.ALL的关系@ManyToOne的一面呢? – Asymmetric33

+0

如果@ManyToOne具有CascadeType.All,则触发删除AlarmnotifyEmailConfEntity实例。但我不想要这个操作。 –

回答

0

我在jpa removing child from collection找到了答案。 因此加入orphanRemoval = true解决了这个问题。

@Entity(名称= “alarmnotify_email_conf”) @Table(名称= “alarmnotify_email_conf”) 公共类AlarmnotifyEmailConfEntity实现Serializable {

@OneToMany(的mappedBy = “alarmnotifyEmailConfRef”,级联= CascadeType的。 ALL,orphanRemoval = true) private List alarmnotifyEmailEntityList;

}//end of Class 
0

从我的经验级联只适用于相同的操作。如果我们保存家长,那么孩子们也会保存与更新相同的情况。但我想当你想要移除一个孩子时,我们必须使用实体管理器明确移除,并且不能只合并父母,并且期望将级联移除给孩子。