jpa+hibernate一对多双向关联关系更新问题
就好比订单(Order)和订单项(OrderItem)
订单一的一方,订单项是多的一方
原本订单A里面有四个订单项(1,2,3,4)
现在有一个订单项不要了(4),最终只保留(1,2,3)
费了半天劲也没有保存成功为什么
请大牛指点江山
------解决方案--------------------
JPA规范是不支持级联删除, 不过一般实现方都会提供扩展功能来支持。
如果你用的是toplink实现包的话, 你就要实现一个DescriptorCustomizer 接口
public class AccountDescriptorCustomizer implements DescriptorCustomizer {
public void customize(ClassDescriptor descriptor) throws Exception {
OneToManyMapping mapping = (OneToManyMapping) descriptor.getMappingForAttributeName("acct2groups");
if (mapping != null) mapping.setIsPrivateOwned(true);
}
}
然后在persistence.xml 中properties节点下加入:
<property name="toplink.descriptor.customizer.包名.Account" value="包名.AccountDescriptorCustomizer"/>
最后Acct2group 中 @ManyToOne 属性cascade将CascadeType.ALL 改成 {CascadeType.REFRESH, CascadeType.MERGE, CascadeType.MERGE}.
如果是hibernate的实现的话, 在@OneToMany
旁边加上: @org.hibernate.annotations.Cascade(org.hibernate.annotations.CascadeType.DELETE_OPTION)
--------------------------------------------