在项目中遇到利用hibernate执行查询后立马又对数据库数据进行了更新,导致了错误。

public String getName()
{
if(this.name==null)
{
this.name="";
}
return this.name;
}

因为在数据库中是null,在hibernate查询时会设置成“”。hibernate会任务session中的实体发生了改变,就会执行update。

解决方式:

采用的解决办法是将配置文件增加一个属性access="field" 这样就不会通过get方法比较属性而直接访问属性字段
<property name="name" type="java.lang.String" access="field">
<column name="name" length="20" />
</property>

default-access="field¦property¦ClassName"

这里field表示Hibernate直接读取类中的字段值。
这种方式如果你在业务中不需要getter和setter的话,就可以不用写了。这时,可以设置属性为不可变,可以不用执行脏检查。

property(默认)表示Hibernate通过getter和setter读取。
这种方式可以在getter和setter中做额外的处理。

ClassName,是指使用实现了org.hibernate.property.PropertyAccessor接口的类的具体策略来访问字段属性。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。