【问题标题】:@Access ignored by EclipseLink, works ok in Hibernate@Access 被 EclipseLink 忽略,在 Hibernate 中工作正常
【发布时间】:2012-05-27 19:01:41
【问题描述】:


我在一个字段上有一个带有@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;
}

【问题讨论】:

  • 你试过用@Access(AccessType.FIELD)注释类吗?
  • 是的 :) 不好,尝试删除 EmbeddedId 并放置一个常规 ID。不好。
  • 尝试用@Access(AccessType.FIELD) 注释标记你的类?
  • 你用的是什么版本?对属性的访问是 JPA 2.0 EL >= 2.0 的一部分

标签: hibernate netbeans jpa-2.0 eclipselink


【解决方案1】:

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

@Access(AccessType.FIELD)

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

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

混合放置注释的应用程序的行为 实体层次结构中的字段和属性,无需显式 未定义指定 Access 注释。
...
当 Access(FIELD) 应用于此类时,可以 有选择地指定类中的各个属性 财产访问。指定一个持久属性以供 持久性提供程序运行时,必须指定该属性 访问(属性)。

.

【讨论】:

    猜你喜欢
    • 2021-08-03
    • 1970-01-01
    • 1970-01-01
    • 2014-02-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-12
    • 2023-03-21
    • 1970-01-01
    相关资源
    最近更新 更多