根据我的JPA 2.0书(和在线文档),我应该能够在单个实体或实体层次结构中混合字段和属性访问。类上的@Access注释指定了默认访问权限。放置在字段或属性getter上时@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规范
任何人都可以证实这一点,还是我在某个地方犯了一个愚蠢的错误?
答案 0 :(得分:1)
我见过类似(不是相同但相似)的问题,例如HHH-5004,所以我不排除这可能是一个新问题(TCK似乎并不详尽)。但是你使用的是什么版本的Hibernate?你尝试过最新的吗?
答案 1 :(得分:1)
根据文档,您的代码似乎是正确的。顶部的@Access(AccessType.FIELD)注释是不必要的,因为您注释了字段int id; 这告诉hibernate使用字段访问。我尝试了一个非常类似的例子,注释和xml配置混合。这会导致相同的行为,因此它可能是hibernate中的一个错误。
我尝试使用hibernate 3.5.3