Java Hibernate在@Access方面不符合JPA?
根据我的JPA2.0书(和在线文档),我应该能够在单个实体或实体层次结构中混合字段和属性访问。类上的注释指定默认访问权限。当放置在字段或属性上时,getter@Access可以指定应覆盖此字段的默认值Java Hibernate在@Access方面不符合JPA?,java,hibernate,jpa,annotations,Java,Hibernate,Jpa,Annotations,根据我的JPA2.0书(和在线文档),我应该能够在单个实体或实体层次结构中混合字段和属性访问。类上的注释指定默认访问权限。当放置在字段或属性上时,getter@Access可以指定应覆盖此字段的默认值 @Entity @Access(AccessType.FIELD) Class Foo { @Id int id; @Column(name = "myfield") String myField; @Column(name = "myProp") @Access(A
@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获取其字段与属性的线索,并与之一起运行…完全忽略了关于@Access的JPA规范
谁能证实这一点,或者我在什么地方犯了一个愚蠢的错误吗?我见过类似的(不一样但相似)问题,因此我不排除这可能是一个新问题(TCK似乎并不详尽)。但是您使用的是什么版本的Hibernate?您是否尝试了最新版本?根据文档,您的代码似乎是正确的。顶部的@Access(AccessType.FIELD)注释是不必要的,因为您注释了字段int id; 这告诉hibernate使用字段访问。我尝试了一个非常类似的例子,注释和xml配置混合在一起。这会导致相同的行为,因此可能是hibernate中的一个bug
我试用了hibernate 3.5.3hibernate 3.5.3-FINAL,这是6月17日的最新版本。我看到了HHH-5004,虽然它与手头的问题无关,但它确实让我觉得“访问”根本不被Hibernate社区使用。你认为我应该在那里打开一个bug吗?@HDave:这就是我要做的(我通常会用另一个实现来仔细检查行为,例如EclipseLink),然后提到规范的相关部分以及它与RI一起工作的事实。测试用例通常是受欢迎的,有助于更快地修复问题。