我们在应用程序中使用 java + hibernate。一张表有一列指示记录是不可变的还是可变的。具有不可变标志的记录由应用程序部署过程使用 SQl 插入到表中。
应用程序使用休眠会话来保存/删除/更新表中的实体。我们希望 hibernate 不会为带有不可变标志的记录做任何事情。
如何根据字段值将记录标记为不可变? 如何防止休眠更新/保存/删除基于其字段值的实体?
我们尝试过使用hibernate拦截器但失败了:
也想用Java bean setter,但是可以停止更新,但是不能防止删除。我们不想将 hacky 代码放在 setter 中,也不想在服务中实现它。我们想找到一种方法来使用 JPA/Hibernate 提供的功能来做到这一点。
您可以通过在列上包含 where 子句谓词来更改用于具有
update
和 delete
的实体的 @SQLUpdate
和 @SQLDelete
语句。像这样的东西:
@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 {
...
}