EclipseLink忽略了@Access,在Hibernate中运行正常

Cos*_*min 3 netbeans hibernate eclipselink jpa-2.0


@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;
}
Run Code Online (Sandbox Code Playgroud)

Mik*_*unu 5

问题是实体错过了类级别注释:

@Access(AccessType.FIELD)
Run Code Online (Sandbox Code Playgroud)

只需在@Entity中添加下一个.当注释字段和方法时,您不知道实际使用了哪种访问类型.在您的情况下,它似乎是方法访问​​,并且简单地忽略@EmbeddedId.

在JPA 2.0规范中,这用以下词语告知:

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

.