Hibernate entity属性修改导致对象的记录被修改

当通过hibernate获取到entity后 然后在get属性时修改了属性的值后 然后根据id从新到数据库中查询该实体 这是对应的表中该记录也被修改 如果没重新查询修改不修改还不好说

log分析 当修改实体后在次查询执行了三次hibernate语句 首先执行查询语句 接着执行修改语句 访问实体时又执行了次查询语句

原因分析 当通过herbernate查询出entity后 将被缓存在session中 当修改了entity的值后 在第二次查询时一看缓存的值有修改 将把entity里修改的值放到entity里


除了导致查询时会执行修改操作以外 有可能还会出现更具id查询奔溃现象

奔溃场景:当使用dao更具id查询出来后修改了了entity的属性 接着使用dao查询同张表的不同id的记录时出现崩溃


出问题的Entity代码

public String getThumb() {
        if(TextUtils.isBlank(thumb)){
            thumb= "heihei.jpg";
        }else{
            thumb=thumb+".jpg");
        }
        return thumb;
}

解决方案

1.在查询的地方开启的事物为read_oliny

2.getThumb方法里不要修改thumb的值(推荐)

public String getThumb() {
        String result;
        if(TextUtils.isBlank(thumb)){
            result= "heihei.jpg";
        }else{
            result=thumb+".jpg");
        }
        return result;
}



其他资料

猜你喜欢

转载自blog.csdn.net/nailsoul/article/details/52207689