2012-05-21 41 views
3


好,我有一個實體@EmbeddedId在現場,我推翻了訪問類型字段使其Property訪問。但這被EclipseLink忽略,Hibernate沒關係。此外Netbeans顯示我錯誤,因爲這:@Access被忽略的EclipseLink,工作在休眠

該類必須使用一致的訪問類型(字段或屬性)。
沒有爲此實體層次結構定義的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; 
} 
+0

有沒有試過用'@Access(AccessType.FIELD)'註解類? – axtavt

+0

是的:)沒有好的,試圖刪除EmbeddedId,並把一個正規的ID。不好。 –

+0

嘗試用@Access(AccessType.FIELD)註釋標記你的類嗎? – JMelnik

回答

5

問題是,下面的類級別批註實體失誤:

@Access(AccessType.FIELD) 

只需添加它@Entity下。當兩個字段和方法都被註釋時,您不知道實際使用哪種訪問類型。在你的情況下,它似乎是方法訪問​​,並且@EmbeddedId被忽略。

在JPA 2.0規範,這是說用下面的話:

的,沒有明確 指定訪問標註的實體層次結構中的 字段和屬性混合註釋的放置應用程序的行爲是不確定的。
...
當訪問(FIELD)應用於這樣的類別時,有可能在 屬性訪問中有選擇地指定類別內的各個屬性。要指定永久性屬性以供 持久性提供程序運行時訪問,必須將該屬性指定爲 Access(PROPERTY)。