sgg_(7_8)_session.update()
一、session的update()方法
session的update()方法使一个游离对象转变为持久化对象,并且计划执行一条update语句。
若希望session仅当修改了对象属性事才执行update()语句,可以把映射文件中<class>元素的select-before-update设为true,该属性的默认值为false
当update()方法关联一个游离对象时,如果在session的缓存中已经存在相同OID的持久化对象,会抛出异常
当update()方法关联一个游离对象时,如果在数据库中不存在相应的记录,也会抛出异常。
若更新一个持久化对象,不需要显示的调用update方法,因为在调用Transaction的commit()方法时,会先执行session的flush()方法。
更新一个游离对象,需要显式的调用session的update方法,可以把一个游离对象变为持久化对象。
二、session的saveOrUpadate()方法
session的saveOrUpate()方法同时包含了sava()与update()方法的功能
判定对象为临时对象的标准
java对象的OID为null
映射文件中<id>设置了unsaved-value属性,并且java对象的OID取值与这个unsaved-value属性值匹配。
三、了解session的merge()方法
四、session的delete()方法
可以通过设置hibernate.cfg.xml配置文件hibernate.use_indentifier_rollback为true,使删除对象后,把其OID置为null。
五、session的evict()
从session缓存中把指定的持久化对象移除。
六、在hibernate中配置c3p0数据源
6.1导入jar包
hibernate-release-4.2.4.Final\lib\optional\c3p0\*.jar
6.2在hibernate.cfg.xml中加入这几个配置项
c3p0数据库连接池属性
hibernate.c3p0.max_size:数据库连接池的最大连接数
hibernate.c3p0.min_size:数据库连接池的最小连接数
hibernate.c3p0.timeout:数据库连接池中连接对象在多长时间没有使用过后就应该被销毁
hibernate.c3p0.max_statements:缓存Statement对象的数量
hibernate.c3p0.idle_test_period:表示连接池检测线程多长时间检测一次池内的所有链接对象是否超时,连接池本身不会把自己从连接池中移除而是专门有一个线程按照一定的时间间隔来做这件事,这个线程通过比较连接对象最后一次被使用时间和当前时间的时间差来和timeout做对比,进而决定是否销毁这个连接对象。
hibernate.c3p0.acquire_increment:当数据库连接池中的连接耗尽时,同一时刻获取多少个数据库连接对象。