什么决定了 eclipselink 在何处寻找 @Column、@Temporal 和 @Id 注释?
What determines where eclipselink is looking for @Column, @Temporal and @Id annotations?
我尝试将我的项目从 Java 6 + WebLogic 12.1.1 + EclipseLink 2.5.0 迁移到 Java 8 + WebLogic 12.1.3 + EclipseLink 2.6.4。
在我所有的 EclipseLink 实体中,我有 @Id、@Temporal 和 @Column 注释用于 getter 而不是用于字段。但是当我将我的应用程序部署到较新的 WebLogic 时,它会失败并出现这样的错误
org.eclipse.persistence.exceptions.ValidationException Exception Description: Entity class [class com.example.MyEntity] has no primary key specified. It should define either an @Id, @EmbeddedId or an @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();
}
}
我找到了解决方案。
Class 注释@Access 确定eclipselink 将在何处查找@Id 和@Temporal 注释。您可以将其设置为@Access(AccessType.PROPERTY),或@Access(AccessType.FIELD)
我尝试将我的项目从 Java 6 + WebLogic 12.1.1 + EclipseLink 2.5.0 迁移到 Java 8 + WebLogic 12.1.3 + EclipseLink 2.6.4。
在我所有的 EclipseLink 实体中,我有 @Id、@Temporal 和 @Column 注释用于 getter 而不是用于字段。但是当我将我的应用程序部署到较新的 WebLogic 时,它会失败并出现这样的错误
org.eclipse.persistence.exceptions.ValidationException Exception Description: Entity class [class com.example.MyEntity] has no primary key specified. It should define either an @Id, @EmbeddedId or an @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();
}
}
我找到了解决方案。 Class 注释@Access 确定eclipselink 将在何处查找@Id 和@Temporal 注释。您可以将其设置为@Access(AccessType.PROPERTY),或@Access(AccessType.FIELD)