load 没有报异常
get 不报
1. <class name="Child" table="child">
2. <id column="id" name="id" type="integer" unsaved-value="null">
3. <generator class="identity"/>
4. </id>
5. ...
6. </class>
unsaved-value="null" (默认情况,适用于大多数对象类型主键 Integer/Long/String/...)
当Hibernate取一下child的Id,取出来的是null(在上例中肯定取出来的是null),和unsaved-value设定值相等,发送save(child)
当Hibernate取一下child的id,取出来的不是null,那么和unsaved-value设定值不相等,发送update(child)
unsaved-value="none" 的时候,由于不论主键属性为任何值,都不可能为none,因此Hibernate总是对child对象发送update(child)
unsaved-value="any" 的时候,由于不论主键属性为任何值,都肯定为any,因此Hibernate总是对child对象发送save(child)
事务级缓存 session 一级
1 现在内存中查询对象或id
2 在没有存在对象
3 查询sql
load(xxx.class,id) 能充分利用一,二级缓存,读取出来的是代理类实例,但是查不出来则报错
get() 读取出来的永远是实体,读不出来返回null
find() 直接使用HQL,没有利用缓存,写入缓存(大数据包内存溢出Memony异常,由于一次性加载)
iterator() 先执行sql查找很多id,然后在用id到缓存中去查找相当于session.load()方法,写入缓存
session.evict(bean)大数据量,可以清除缓存,减少Memony异常
应用级缓存 sessionFactory 二级
分布式缓存
select * from table for update (独占,别人update不了,悲观锁)
乐观锁,加入版本号,每次修改都加入版本号,每次修改比较版本号
hibernate 3 延迟加载是true ,不想马上加载
hibernate 2 延迟加载是false
<property name="hibernate.hbm2ddl.auto" value="create-drop" />
validate 加载hibernate时,验证创建数据库表结构
create 每次加载hibernate,重新创建数据库表结构,这就是导致数据库表数据丢失的原因。
create-drop 加载hibernate时创建,退出是删除表结构
update 加载hibernate自动更新数据库结构
Hibernate 再学习
最新推荐文章于 2024-05-04 08:00:00 发布