3


我在字段上有一个实体@EmbeddedId,并且我覆盖了使其Property访问的字段的访问类型。但这被忽略了EclipseLinkHibernate没关系。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;
}
4

1 回答 1

5

问题是实体缺少以下类级别注释:

@Access(AccessType.FIELD)

只需从@Entity 中添加下一个。当字段和方法都被注释时,你不知道实际使用的是哪种访问类型。在您的情况下,它似乎是方法访问​​,而 @EmbeddedId 只是被忽略了。

在 JPA 2.0 规范中,这是用以下词语来说明的:

在没有明确指定 Access 注释的情况下,将注释放置在实体层次结构中的字段和属性上混合的应用程序的行为是未定义的。
...
当 Access(FIELD) 应用于此类时,可以有选择地指定类中的各个属性以进行属性访问。要指定持久性提供程序运行时访问的持久性属性,该属性必须指定为 Access(PROPERTY)。

.

于 2012-06-19T19:21:45.307 回答