Hibernate学习记录1

来源:互联网 发布:手机陀螺仪水平仪软件 编辑:程序博客网 时间:2024/06/11 16:28

1.session脏检查机制

使用session从数据库中查出一个对象,如果在外面更新了该对象,那么会自动的使用update进行数据库更新


2.session一级缓存

使用session从数据库中查出一个对象,如果再一次取出该对象不会继续向数据库发送sql语句,返回的对象会是原来的那个对象


3.session清理缓存

session.flush()可以清理缓存,按照缓存对象的属性变化在同步更新数据库,如上面的脏检查机制,因为commit里面会自动调用flush方法清理缓存


4.主键生成方式为native方式的,会在save方法的时候就执行insert语句,而如果是increment的,那么会先执行select,然后在提交事务的时候再插入

5.设置清理缓存的时间点

可以通过session的setFlushMode方法在显示设定清理缓存的时间点

清理缓存的模式

各种查询方法

Transaction的commit方法

Session的flush方法

FlushMode.AUTO(默认)

清理

清理

清理

FlushMode.COMMIT

不清理

清理

清理

FlushMode.NEVER

不清理

不清理

清理

6.对象的状态

7.使用代理主键的情况下,自己为对象设置一个id是无效的

8.当对象处于持久化状态的时候,是不允许设置对象的id的
1.如果是save方法持久化对象,在save使用之后设置id会抛出异常
2.如果是persist方法持久化对象,在save使用之前设置id会抛出异常,save方法不会

9.load和get的区别
1.get方法如果用来获取一个不存在的id的数据会返回null,而load会抛出异常
2.load和get采取的延迟检测策略不同
(1)load方法获取一个对象时,不会发送sql语句,当要使用这个对象的时候才会发送sql语句
(2)get方法获取一个对象时,就会发送sql语句

10.update能使一个游离状态的对象转换成一个持久化对象
1.使用update时会发送update语句,无论该对象的属性和数据库的数据是否一致
2.在对象的配置文件处配置select-before-update=true,就可以避免这种情况,这种情况下会执行select语句查找数据库,然后再判断是否要使用sql语句

11.使用update时,如果在session中存在相同id的持久化对象,则会抛出异常,因为这种情况下会有两个持久化对象

12.使用update时,如果数据库中不存在该id所对应的对象,那么也会抛出异常

13.saveOrUpdate方法可以进行save或者update操作
判断标准如下
1.如果对象id为null,那么就进行save
2.如果对象id为null,那么久进行update
如果需要更改判断标准,那么
1.在配置中,id里有个unsaved-value属性,该属性默认为null(所以上面的判断标准为id是否为null)
2.更改该属性,那么如果对象的id和该值一样,那么就使用save方法

14.delete进行删除操作
1.hibernate会根据对应对象的id对数据库的数据进行删除操作
2.如果id不存在那么会抛出异常
3.在执行完delete之后,该对象的id依旧是存在的,如果想在删除之后将该对象的id为null,可以在配置文件中配置如下参数use_identifier_rollback=true







0 0
原创粉丝点击