@Id 和 @column 注解 使用注意


當@Id寫字啊 field 上時 ,如過 把 @column 寫在 getter 方法上 ,會出現錯誤 或者不起作用

Unknown column 'gecompanys0_.sourcec' in 'field list'; sourcec 為 field 的名稱, 數據庫名稱為 sourceName  

當時如果把 @column 也寫在 field 上 時,就可以正常查詢了  。。 

 

同樣如果把 @Id 注解到 getter 方法上,而把 @column 注解到 field 上,也會同樣報上述錯誤。。

所以建議 統一 注解 的地方。。建議都注解到getter 方法上。

原因: 使用Annotations形式的配置方式,默認的訪問形式由@Id標記放置的位置決定,當@Id標記在屬性上聲明,而不是在getter方法上,則所有的其它屬性默認采用屬性訪問形式(即不通過getter和setter方法,直接訪問屬性)

 

以下來自 新浪博客 (commandingofficer)感謝原作者 http://blog.sina.com.cn/s/blog_616e189f0100zrfn.html

1. 屬性訪問的類型和特點(4.4.1)

持久化引擎可以直接或者通過訪問器(即get和set方法)訪問屬性。Hibernate中,使用XML配置形式,通過default-access設置默認的訪問形式,可以有四種選項,default-access=”field|property|noop|custom.Class”。而使用Annotations形式的配置方式,默認的訪問形式由@Id標記放置的位置決定,當@Id標記在屬性上聲明,而不是在getter方法上,則所有的其它屬性默認采用屬性訪問形式(即不通過getter和setter方法,直接訪問屬性)。這種方式是JTA默認的。

當然,Hibernate提供了一種更靈活的方式,使用@org.hibernate.annotations.AccessType可以更改這種默認配置,策略如下:

1)如果AccessType在類(實體)級別設置,類中的所有屬性都使用這個默認訪問方式,除非某個屬性在其屬性或者getter方法上重寫了訪問方式,重寫訪問方式將覆蓋默認方式。但是類級別的設置將會重寫@Id方式的默認訪問方式。

2)如果實體默認設置或者顯示設置了屬性訪問,在屬性上設置AccessType(“property”),更改訪問方式為getter/setter


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM