【发布时间】: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