hibernate 根据持久性实体的字段值使其不可变

a0zr77ik  于 2023-03-03  发布在  其他
关注(0)|答案(1)|浏览(152)

我们在应用中使用java + hib。一个表有一列来指示记录是不可变的还是可变的。具有不可变标志的记录通过应用部署过程使用SQl插入到表中。
应用程序使用休眠会话在表中保存/删除/更新实体。我们希望休眠不会对带有不可变标志的记录执行任何操作。
如何基于字段值标记记录不可变?如何防止Hibernate基于字段值更新/保存/删除实体?
我们尝试使用休眠拦截器,但失败了:
1.从onSave、onDelete引发异常:事务已回滚
1.当实体具有不可变标志时为空:实体被删除了。
也想用Javabean的setter,但是它可以停止更新,但是不能防止删除。我们不想把hacky代码放在setter中,也不想放在service中来实现它。我们想找到一种方法来使用JPA/Hibernate提供的功能来实现它。

bvn4nwqk

bvn4nwqk1#

您可以通过在列上包含where子句 predicate 来更改@SQLUpdate@SQLDelete实体所使用的updatedelete语句。

@Entity
@SQLUpdate(sql = "update my_entity set col1=?,col2=? where id=? and immutable=false", check = COUNT)
@SQLDelete(sql = "delete from my_entity where id=? and immutable=false", check = COUNT)
public class MyEntity {
    ...
}

相关问题