我在一个字段上有一个@EmbeddedId
的实体,我覆盖了使其Property
访问的字段的访问类型。但EclipseLink
忽略了这一点,在Hibernate
中没问题。 Netbeans也因此出现错误:
该类必须使用一致的访问类型(字段或属性) 没有为此实体层次结构定义ID。
@EmbeddedId
private OneId id;
@Transient
private String cosmin;
@Access(AccessType.PROPERTY) // ??
public String getCosmin() {
return cosmin;
}
public void setCosmin(String cosmin) {
this.cosmin = cosmin;
}
答案 0 :(得分:5)
问题是实体错过了类级别注释:
@Access(AccessType.FIELD)
只需在@Entity中添加下一个。当注释字段和方法时,您不知道实际使用了哪种访问类型。在你的情况下,它似乎是方法访问,并且简单地忽略@EmbeddedId。
在JPA 2.0规范中,用以下词语告知:
混合注释放置的应用程序的行为 实体层次结构中的字段和属性没有显式 指定Access注释是未定义的 ...
当Access(FIELD)应用于这样的类时,可以 有选择地指定类中的各个属性 财产访问。指定持久性属性以供访问 持久性提供程序运行时,必须指定该属性 接入(属性)。