【问题标题】:Hibernate not JPA compliant regarding @Access?Hibernate 在 @Access 方面不符合 JPA?
【发布时间】:2010-07-06 05:32:31
【问题描述】:

根据我的 JPA 2.0 书(和在线文档),我应该能够在单个实体或实体层次结构中混合使用字段和属性访问。类上@Access的注解指定了默认访问。当放置在字段或属性上时,@Access 可以指定应该覆盖该字段的默认值。

@Entity
@Access(AccessType.FIELD)
Class Foo {

  @Id
  int id;

  @Column(name = "myfield")
  String myField;

  @Column(name = "myProp")
  @Access(AccessType.PROPERTY)
  public int getMyProp () {
    return 3;
  }

  public void setMyProp (int p) {
    // do nothing
  }
}

此类应生成一个包含三列的表。但是它不与 Hibernate 一起使用...表中缺少“myProp”列,因为显然 Hibernate 从实体 ID 获取其字段 vs 属性提示并使用它运行...完全忽略了关于 @Access 的 JPA 规范.

谁能证实这一点,还是我在某个地方犯了一个愚蠢的错误?

【问题讨论】:

    标签: java hibernate jpa annotations


    【解决方案1】:

    我见过类似的(不一样但类似的)问题,比如HHH-5004,所以我不排除这可能是一个新问题(TCK 似乎并不详尽)。但是你使用的是什么版本的 Hibernate?你试过最新的吗?

    【讨论】:

    • Hibernate 3.5.3-FINAL -- 截至 6 月 17 日的最新版本。我看到了 HHH-5004,虽然它与手头的问题无关,但它确实让我认为 Hibernate 社区根本不使用“@Access”。认为我应该在那里打开一个错误?
    • @HDave:这就是我要做的(我通常会用另一个实现来仔细检查行为,例如 EclipseLink),然后提到规范的相关部分以及它与 RI 一起使用的事实。测试用例通常很受欢迎,有助于更快地解决问题。
    【解决方案2】:

    根据文档,您的代码似乎是正确的。顶部的 @Access(AccessType.FIELD) 注释是不必要的,因为您注释了字段 int id; 这告诉 hibernate 使用字段访问。我尝试了一个非常相似的示例,其中混合了注释和 xml 配置。这会导致相同的行为,因此它可能是休眠中的错误。

    我尝试使用休眠 3.5.3

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多