欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

hibernate学习 博客分类: hibernate

程序员文章站 2024-03-14 23:57:11
...
持久化对象操作:
session的缓存
session的save()方法持久化一个对象时,该对象会被放入缓存中。
session的load()方法会先判断对象是否在缓存中,再去数据库中查询。
session的close()方法会清空缓存。
当session调用commit()方法时,首先清理缓存,然后向数据库提交事务。所以当你连续对对象的一个属性作操作时,只会执行一条update语句
session的flush()方法会清理缓存,执行一系列的SQL语句,但不会提交事务

hibernate中java对象的状态
transient瞬时,new创建,没有被持久化,不处于缓存中
persistent持久化,已经持久化,加入到缓存中
detached游离,已经持久化,不处于缓存中

new->trasient
get(),load(),find(),iterate()->persistent
(trasient)save,saveOrUpdate()->persistent
(persistent)delete()->trasient
(persistent)close(),evict(),clear()->detached
(detached)update(),saveOrUpdate(),lock()->persistent
(detached)delete()->trasient

session的CRUD操作
save:把瞬时对象变为持久化对象。
hibernate使用oid维持表与实体间的关系,当对象处于持久化状态时,不允许对oid的修改操作。
当save方法操作游离态对象时,会重新插入一条语句

update:把游离态对象转化成持久化对象。
把对象重新放入到缓存中,变为持久化对象。
update只有在清理缓存的才会执行,所以当你连续对对象的一个属性作操作时,只会执行一条update语句
当session已经load了oid为1的对象,此时把oid为1游离态对象update,则出错。



出现的问题:  
Disabling contextual LOB creation as createClob() method threw error : java.lang.reflect.InvocationTargetException
java通过jdbc连接sqlserver和oracle时出现这个异常。虽然抛出这个异常,但对整个应用没有影响。这个异常产生的原因是jar包的版本不对。连接oracle10g的jdbc用ojdbc6.jar(1942k),连接sqlserver2008用sqljdbc.jar(570k),而不用sqljdbc4.jar(567k)。postgres用postgresql-8.2-504.jdbc3.jar。