【问题标题】:What determines where eclipselink is looking for @Column, @Temporal and @Id annotations?是什么决定了 eclipselink 在哪里寻找 @Column、@Temporal 和 @Id 注释?
【发布时间】:2017-05-24 17:51:04
【问题描述】:

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

在我所有的 EclipseLink 实体中,我都有用于 getter 而不是字段的 @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();
    }
}

【问题讨论】:

  • 这是bugs.eclipse.org/bugs/show_bug.cgi?id=429992 你打的可能是什么?还要显示实际映射并确保您使用正确的导入。
  • @Eugene,我的实体中没有任何 lambda。
  • 你能看看这些是否有帮助吗? stackoverflow.com/questions/21397393/…
  • @Eugene 不,这与我的问题无关......
  • 您始终可以在实体上指定@Access(AccessType.PROPERTY),但如果没有其他字段级别的持久性属性,则不需要。打开日志记录,看看为什么它会将访问类型默认为不同的东西。检查类是否使用新的 JDK 重新编译,因为 java 版本可能会以某种方式导致问题。

标签: java jpa java-8 weblogic eclipselink


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2013-03-10
    • 1970-01-01
    • 2017-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多