@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

原文地址:https://www.cnblogs.com/zhangchenglzhao/p/4650807.html