zoukankan      html  css  js  c++  java
  • Hibernate执行查询后又立马执行了更新(defaultaccess)

    在项目中遇到利用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接口的类的具体策略来访问字段属性。

  • 相关阅读:
    Shell编程笔记
    Git学习笔记
    JavaScript+jQuery实现简单的动态菜单
    JSON表单提交(ajax异步刷新)
    Json简单实例
    jsp分页
    浅谈this关键字
    Servlet+Javabean+Html实现简单的查询.删除.修改.添加四个功能
    Tomcat的安装与在myeclips中的配置
    jsp页面实现增删修改和查询
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/2980423.html
Copyright © 2011-2022 走看看