Hirbernate set属性自动更新

在SSH框架中,遇到一个对象查询后set属性,未执行update操作却自动更新数据库的情况。原因是Hibernate的持久化状态特性,当在事务中修改持久化对象属性,提交事务时会同步更新数据库。解决办法包括使用copyProperties方法复制对象并仅对副本进行set操作。
摘要由CSDN通过智能技术生成

系统用的是SSH框架的架构,最近遇到了一个问题:
系统有一个接口,查询出来一个对象,然后进行set属性,只是为了后续的判断条件,没有调用update等操作,自动更新到数据库的问题。
为何会自动入库
我们先了解下Hirbernate的3种状态
1:Hibernate的几种实体状态:

1.1.瞬态:
由new命令开辟内存空间的java对象,它没有持久化,没有处于Session中,处于此状态的对象叫瞬时对象。例:

Person person = new Person(“李小龙”, “男”);

如果没有变量对该对象进行引用,它将被java虚拟机回收。

瞬时对象在内存孤立存在,它是携带信息的载体,不和数据库的数据有任何关联关系,在Hibernate中,可通过session的save()或saveOrUpdate()方法将瞬时对象与数据库相关联,并将数据对应的插入数据库中,此时该瞬时对象转变成持久化对象。
1.2.持久化:
当一个实体和Hibernate的Session创建了关系,并获取了持久化标识,而且在Hibernate的Session生命周期内存在。
此时针对该实体任何属性的更改都会直接影响到数据库表中一条记录对应字段的更新,即与数据库表同步。
持久对象具有如下特点:

1. 和session实例关联;

2. 在数据库中有与之关联的记录。

1.3.脱管:
当与某持久对象关联的session被关闭后,该持久对象转变为脱管对象。当脱管对象被重新关联到session上时,并再次转变成持久对象。

脱管对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值