根据字段值使持久实体不可变

问题描述 投票:0回答:1

我们在应用程序中使用 java + hibernate。一张表有一列指示记录是不可变的还是可变的。具有不可变标志的记录由应用程序部署过程使用 SQl 插入到表中。

应用程序使用休眠会话来保存/删除/更新表中的实体。我们希望 hibernate 不会为带有不可变标志的记录做任何事情。

如何根据字段值将记录标记为不可变? 如何防止休眠更新/保存/删除基于其字段值的实体?

我们尝试过使用hibernate拦截器但失败了:

  1. onSave、onDelete 抛出异常:事务回滚
  2. 当实体具有不可变标志时将其清空:实体已被删除。

也想用Java bean setter,但是可以停止更新,但是不能防止删除。我们不想将 hacky 代码放在 setter 中,也不想在服务中实现它。我们想找到一种方法来使用 JPA/Hibernate 提供的功能来做到这一点。

hibernate immutability interceptor
1个回答
0
投票

您可以通过在列上包含 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 {
    ...
}
© www.soinside.com 2019 - 2024. All rights reserved.