当实体类通过替换 getter 或 setter 方法上的注释来使用属性访问权时,必须为要持久存储的字段定义 getter 方法和 setter 方法。OpenJPA 将忽略没有与 setter 方法一起提供的已注释 getter 方法,在这种情况下 EclipseLink 将抛出异常。
该规则将标记缺少 setter 方法的属性访问权字段的已注释 getter 方法。复审实体定义并对其进行修改以得到期望的行为。 如果希望 JPA 提供程序忽略该字段,请移除 getter 方法上的任何注释。如果希望持久存储该字段,请添加 setter 方法。
在以下实体类中,getVersion 方法由该规则标记。
package entities; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Transient; import javax.persistence.Version; @Entity public class MissingSetter2 { private int id; private long time; public MissingSetter2 (int id) { this.id = id; } @Id public int getId() { return id; } public void setId(int id) { this.id = id; } // This getter is not annotated, so it is not flagged. public long getTime() { return time; } // This getter is flagged because it is annotated and there is no setter. @Version public double getVersion() { return 2.0; } public MissingSetter2() { time = 0; } } |
有关此问题和其他 OpenJPA 到 EclipseLink 迁移问题的信息,请参阅 OpenJPA to EclipseLink JPA Migration: Mappings 指南。