2010-07-06 88 views
3

根據我的JPA 2.0書(和在線文檔),我應該能夠在單個實體或實體層次結構中混合使用字段和屬性。該類的註釋@Access指定默認訪問。放置在字段或屬性getter時,@Access可以指定應該爲該字段覆蓋默認值。關於@Access,Hibernate不符合JPA標準?

@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採取其字段與屬性cue並且與它一起運行......完全忽略JPA規範與@Access的關係。

任何人都可以證實這一點或我做了一個愚蠢的錯誤?

回答

1

我見過類似(不相同但相似)的問題,如HHH-5004,所以我不排除這可能是一個新的(TCK似乎並不詳盡)。但是你使用的是什麼版本的Hibernate?你有沒有嘗試過最新的?

+0

Hibernate 3.5.3-FINAL - 截至6月17日的最新版本。我看到HHH-5004,雖然它不在眼前,但我認爲Hibernate社區根本不使用「@Access」。想想我應該在那裏打開一個錯誤? – HDave 2010-07-06 06:56:30

+0

@HDave:這就是我所要做的(我通常會用另一個實現來檢查行爲,例如EclipseLink),然後提及規範的相關部分以及它與RI協同工作的事實。測試用例通常是受歡迎的,有助於更快地修復問題。 – 2010-07-06 07:35:23

1

根據文檔,您的代碼似乎是正確的。頂部的@Access(AccessType.FIELD)註釋是不必要的,因爲您註釋了字段int id; 這告訴休眠使用字段訪問。我嘗試了一個非常類似的例子,註釋和XML配置混合。這導致了相同的行爲,所以它可能是休眠中的一個錯誤。

我試着用休眠3.5.3