如何使实体成为只读?
使用 JPA 使实体只读的正确方法是什么?我希望我的数据库表永远不要以编程方式修改。
我想我明白我应该用.是否可以使用注释使我的实体在从数据库中检索后直接锁定?还是我必须搞砸并覆盖该特定实体的通用DAO?LockModeType.READ
使用 JPA 使实体只读的正确方法是什么?我希望我的数据库表永远不要以编程方式修改。
我想我明白我应该用.是否可以使用注释使我的实体在从数据库中检索后直接锁定?还是我必须搞砸并覆盖该特定实体的通用DAO?LockModeType.READ
在您的实体中添加如下:EntityListener
@Entity
@EntityListeners(PreventAnyUpdate.class)
public class YourEntity {
// ...
}
实现 您的 ,以便在发生任何更新时引发异常:EntityListener
public class PreventAnyUpdate {
@PrePersist
void onPrePersist(Object o) {
throw new IllegalStateException("JPA is trying to persist an entity of type " + (o == null ? "null" : o.getClass()));
}
@PreUpdate
void onPreUpdate(Object o) {
throw new IllegalStateException("JPA is trying to update an entity of type " + (o == null ? "null" : o.getClass()));
}
@PreRemove
void onPreRemove(Object o) {
throw new IllegalStateException("JPA is trying to remove an entity of type " + (o == null ? "null" : o.getClass()));
}
}
这将为您的实体创建一个具有 JPA 生命周期侦听器的防弹安全网。
解决方案是使用基于字段的注释,将字段声明为仅建议公共 getter。这样做,您的对象无法更改。protected
(此解决方案不是特定于实体的,它只是构建不可变对象的一种方法)