系统用的是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上时,并再次转变成持久对象。
脱管对象