瞬时对象 new delete 数据库没对应
持久对象 get load find iterate save saveorupdate update lock
离线对象 evict close clear 数据库有对应
session级缓存叫一级缓存,save后便纳入管理close后释放
persistent对象如果修改会发出update语句,但是是在commit时发出的
当属性发生改变,hibernate会自动和数据库同步
Name:name |
Name:name1 |
save和属性变化会生成两个独立的对象
在commit时会进行脏数据检查,save会发出insert,修改后会对比新的和原来的不一样,所以会发出update语句。如果前后两个一样不会发update语句
detached对象update方法会变成persistence状态再commit後会发出update语句
get通过id返回的就是对象是persistence状态,发出查询语句,查不到不会抛异常,返回null
load返回的是对象代理,并不发出SQL,是Lazy的,是等到使用到的时候(user.getName)才发出查询,找不到抛异常
可以手动构造detached对象
delete方法会发出delete语句使得对象变成transient状态
分页:根据方言生成不同的分页sql语句
Query query = session.createQuery("from User");
query.setFirstResult(0);
query.setMaxResults(2);
query.list();