2016-04-22 132 views
1

我想註釋我的字段,因爲getters和setter是大部分時間由IDE生成的。 當我使用@Id註解標識符字段時,實體的訪問策略變爲基於字段。但是,我不希望在調用getId()時發生延遲初始化異常,以防實體延遲加載。JPA - 訪問策略

我想註釋字段,但我也想擁有基於屬性的訪問策略。我怎樣才能做到這一點?

我把@Access(AccessType.PROPERTY)我的實體類的頂部,但後來我的JPA提供者,即休眠,拋出org.hibernate.AnnotationException: No identifier specified for entity: ...

+1

請多解釋一下爲什麼你需要這個?屬性/字段訪問定義了JPA提供程序如何訪問您的實體和註釋,而不是您的應用程序如何執行,因此它不應該影響任何惰性初始化問題。 – Chris

+0

你可以發佈你的實體或其樣本嗎?否則很難猜測你爲什麼遇到問題。 – ujulu

+0

@Chris,hibernate通過字段訪問它,因爲註釋在字段上,但我的其他類調用getId(),因爲id通常是私有的。如果實體延遲加載,則會導致異常。我想繼續註釋字段,但能夠毫無問題地調用getId。這僅用於id字段。 – Ramazan

回答

0

對實體指定@Access(AccessType.PROPERTY)將導致供應商只能看屬性,註釋和用於訪問實體,因此它應該忽略字段註釋。

@Access(AccessType.PROPERTY)註釋也可用於方法和字段,允許使用不同的東西。在您的情況下,將其保留爲默認值,繼續向字段添加註釋但使用@Access(AccessType.PROPERTY)註釋標記它們將導致提供者選取註釋並仍然使用屬性訪問實體上的值。

正如在評論中提到的,這不會影響延遲設置。