In your entity add an EntityListener
like this:
@Entity
@EntityListeners(PreventAnyUpdate.class)
public class YourEntity {
// ...
}
Implement your EntityListener
, to throw an exception if any update occurs:
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()));
}
}
This will create a bullet proof safety net for your entity with JPA lifecycle listeners.
- PRO: JPA standard - not hibernate specific
- PRO: very safe
- CON: only shows write attempts at runtime. If you want a compile time check, you should not implement setters.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…