将完整实体标记为“ updatable = false”

stg*_*stg 3 jpa eclipselink

在一个应用程序中,有多个实体类,对于这些实体类,应禁止对数据库的更新语句。我想插入数据库并从中读取数据,但是从不对现有记录进行任何更新。

有没有办法将整个@Entity班级标记为updatable=false

  • 可以使用@Column(updatable=false)或类似的注释来注释每个字段,但是出于明显的原因,我想避免这种情况。

  • 摆脱setter方法也不是一种选择,因为实体类也用作DTO,而应用程序的其他部分则需要这些setter。因此,这将导致大量重构现有代码。

是否有另一种简单明了的方法来实现我想要的JPA 2.1 / EclipseLink(+ Extensions)

Tob*_*fke 5

您可以使用@PreUpdate

@Entity
public class ReadOnlyEntity {
  @PreUpdate
  private void preUpdate() {
    throw new UnsupportedOperationException();
  }
}
Run Code Online (Sandbox Code Playgroud)

这样,您将永远无法更新(写入)该实体。