當@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