是什么决定了eclipselink寻找@Column,@ Temporal和@Id注释的位置?

时间:2017-01-10 09:33:37

标签: java jpa java-8 weblogic eclipselink

我尝试将项目从Java 6 + WebLogic 12.1.1 + EclipseLink 2.5.0迁移到Java 8 + WebLogic 12.1.3 + EclipseLink 2.6.4。

在我的所有EclipseLink实体中,我有@Id,@ Temporal和@Column注释用于获取而不是用于字段。但是,当我将我的应用程序部署到较新的WebLogic时,它会失败并出现类似

的错误
  

org.eclipse.persistence.exceptions.ValidationException异常描述:实体类[class com.example.MyEntity]没有指定主键。它应该定义@ Id,@ EmbeddedId或@IdClass

如何告诉EclipseLink在getId()方法之上查找此注释,而不是在私有id字段之上?

也许我应该让管理员以某种方式调整WebLogic?

修改

实体的一个例子

@Entity
@ReadOnly
@Table(name="CONTRACT_OPTION", schema="SCH")

public class ContractOption implements Serializable {
    private static final long serialVersionUID = 1L;
    private Long contractOptionId;
    private String contractOptionName;
    private BigDecimal sortOrder;
    private Date date;
    public ContractOption() {}


    @Id
    @Column(name="CONTRACT_OPTION_ID")
    public Long getContractOptionId() {
        return this.contractOptionId;
    }

    public void setContractOptionId(Long contractOptionId) {
        this.contractOptionId = contractOptionId;
    }


    @Column(name="CONTRACT_OPTION_NAME")
    public String getContractOptionName() {
        return this.contractOptionName;
    }

    public void setContractOptionName(String contractOptionName) {
        this.contractOptionName = contractOptionName;
    }


    @Column(name="SORT_ORDER")
    public BigDecimal getSortOrder() {
        return this.sortOrder;
    }

    public void setSortOrder(BigDecimal sortOrder) {
        this.sortOrder = sortOrder;
    }

    @Temporal(TemporalType.TIMESTAMP)
    @Column(name="DATE")
    public Date getDate() {
        return date;
    }

    public void setDate(Date date) {
        this.date = date;
    }

    @Override
    public String toString() {
        return getContractOptionName();
    }
}

1 个答案:

答案 0 :(得分:1)

我找到了解决方案。 类注释@Access确定eclipselink在哪里查找@Id和@Temporal注释。您可以将其设置为@Access(AccessType.PROPERTY)或@Access(AccessType.FIELD)