Hibernate的方法获取对象后,对象调用set后会自动更新数据库内容的解决办法
2018-02-26 13:36
525 查看
例如:
Object obj = dao.get(Object_2.classs,id);
obj.setName("张三");
这种情况下Hibernate下次提交事务的时候会把这个数据库中对应数据更新成set后的。
产生原因涉及到Hibernate设计原理,(以下这段话复制地址:http://blog.csdn.net/yang_lover/article/details/45057181)
1.瞬态:
一个实体通过new操作符创建后,没有和Hibernate的Session建立关系,也没有手动赋值过该实体的持久化标识(持久化标识可以认为是映射表的主键)。
此时该实体中任何属性的更新都不会反映到数据库表中。
2.持久化:
当一个实体和Hibernate的Session创建了关系,并获取了持久化标识,而且在Hibernate的Session生命周期内存在。
此时针对该实体任何属性的更改都会直接影响到数据库表中一条记录对应字段的更新,即与数据库表同步。
3.脱管:
当一个实体和Hibernate的Session创建了关系,并获取了持久化标识,而此时Hibernate的Session生命周期结束,实体的持久化标识没有被改动过。
针对该实体任何属性的修改都不会及时反映到数据库表中。 关闭session可以使实体从持久化状态转为托管状态。
这样即可避免自动更新。
Object obj = dao.get(Object_2.classs,id);
obj.setName("张三");
这种情况下Hibernate下次提交事务的时候会把这个数据库中对应数据更新成set后的。
产生原因涉及到Hibernate设计原理,(以下这段话复制地址:http://blog.csdn.net/yang_lover/article/details/45057181)
1.瞬态:
一个实体通过new操作符创建后,没有和Hibernate的Session建立关系,也没有手动赋值过该实体的持久化标识(持久化标识可以认为是映射表的主键)。
此时该实体中任何属性的更新都不会反映到数据库表中。
2.持久化:
当一个实体和Hibernate的Session创建了关系,并获取了持久化标识,而且在Hibernate的Session生命周期内存在。
此时针对该实体任何属性的更改都会直接影响到数据库表中一条记录对应字段的更新,即与数据库表同步。
3.脱管:
当一个实体和Hibernate的Session创建了关系,并获取了持久化标识,而此时Hibernate的Session生命周期结束,实体的持久化标识没有被改动过。
针对该实体任何属性的修改都不会及时反映到数据库表中。 关闭session可以使实体从持久化状态转为托管状态。
解决办法:
把上述代码例子中的对象"obj",调用方法:sessionFactory.getCurrentSession().evict(obj);这样即可避免自动更新。
相关文章推荐
- 避免 Hibernate 中用get/load方法获取的实体调用set方法后自动更新
- 避免 Hibernate 中用get/load方法获取的实体调用set方法后自动更新
- 避免 Hibernate 中用get/load方法获取的实体调用set方法后自动更新
- 关于JPA封装数据库数据到实体不调用属性的get和set的方法解决办法
- Hibernate中的对象状态,及自动更新原因,Hibernate set对象后不调用update却自动更新
- Spring3与hibernate4整合,sessionFactory.getCurrentSession()方法获取不到Session对象异常解决办法
- PHP中 对象自动调用的方法:__set()、__get()、__tostring()
- java读取数据库指定表,生成bean,获取主键,自动生成get、set方法
- Spring + Hibernate 结合后不能自动建立数据库表的解决方法
- “[ODBC Microsoft Access Driver] 不能更新 数据库或对象为只读”解决方法
- jframe 对象(GroupedAction)传递无法调用对象的方法解决办法
- 玩转SSH--Hibernate(三)---手动修改数据库,前台查询信息不同步更新问题解决方法
- Access “不能更新 数据库或对象为只读”的解决方法
- 在firefox下调用flash对象的方法不成功的解决办法
- JS会自动调用toString()方法来显示日期(即“Date对象的内容”)
- 关于jquery html()方法获取带有OBJECT标签的元素内容时,出现“类型不匹配。”的解决办法
- getHibernateTemplate().update()方法更新不了解决办法
- hibernate中查询出来的字段并不能自动转换为bean对象的解决方法
- PHP中用set_time_limit(0)长连接的实现--更新数据库时间限制中断解决方法
- MyEclipse Hibernate自动生成的DAO 数据库修改不起作用的解决办法