unsaved-value : save或update方法使用依据 String ,默认null,如果使用unsaved-value=\,当执行save方法,设置“abc”相当之前null
8.4 主键生成策略
9 要求:
? ? ? ?
搭建hello world
主配置文件:多读(key),value多敲
映射文件: 10 持久对象状态 ? ? ? hibernate之后操作通过对象状态确定如何使用api 状态分类(3种):transient 瞬时态、persistent持久态、detached脱管态 瞬时态:session没有缓存数据,数据库没有对应的数据。例如:new 对象 持久态:session缓存数据,数据库中最终将会有数据。例如:save(user) 脱管态:session没有缓存,数据库中有数据。例如:session.close() / new User().setUid(1) 删除态:给delete专门定义一个状态。(未官方) 状态之间的转换 ? ? ? ? 瞬时态 瞬时态 --> 持久态 当执行save() 当执行saveOrUpdate() ,hibernate底层执行save 瞬时态 --> 脱管态 手动设置OID,如果OID对应的记录再数据不存在,之后操作将抛异常(欺骗) 持久态 持久态 --> 瞬时态 当指定delete() --(存放问题--删除态) 持久态 --> 脱管态 session.close() 关闭,session不存在,缓存不存在 session.clear() 清除所有缓存。 session.evict(PO) 将指定对象从缓存移除。 脱管态 脱管态 --> 瞬时态 手动删除OID 脱管态 --> 持久态 执行update 执行saveOrUpdate 所有的查询结果,对象都是 持久态,及查询结果保存session。 11 一级缓存 ? 一级缓存为session级别的缓存,及将数据保存session中。 ? 一级缓存内置,不能删除,必须使用的。 ? 一级缓存提供性能 @Test public void demo01(){ //证明:一级缓存 Session session = H3Utils.getCurrentSession(); session.beginTransaction(); // 1 执行select ,将结果缓存到一级缓存 Category category = (Category) session.get(Category.class, \); System.out.println(category); //2 如果一级缓存有数据,将直接获取 Category category2 = (Category) session.get(Category.class, \); System.out.println(category2); session.getTransaction().commit(); }