JPA CascadeType.ALL 的坑

今天遇到了一个 JPA cascadeType 不管用的问题,折腾了半天。

现象:

一个 Server 对象, ManyToOne Unidirectional 包含了 OS 对象。

但是保存 Server 对象时, CascadeType.PERSIST 不管用。非得用 CascadeType.ALL 才行。

可是我又不想用 CascadeType.ALL, 因为里面也含有 CascadeType.REMOVE,我不想一个 Server Instance 被删了,强迫把所有的 OS 也删了。

我甚至把 CascadeType.ALL 展开写,把五种情况都写全了,就是不管用。只有直接用 CascadeType.ALL 才管用。

为什么?

原因是我的 DAO 底层没有使用 标准 JPA 实现,而是使用 Hibernate 的 SaveOrUpdate 实现。因此,相应的保存事件不是通过 PERSIST。后来,我把 DAO 的实现重写了。用标准的persist() 和 merge() 函数来实现。这样 Listener 就能监听到相应的操作,就会主动替我去 persist() 包含的类了。整个世界都清净了。

看来起要好好学习 JPA。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值