Stage3-day14-hibernate

  1. oracle数据库中不允许同时存在两个long类型的数据.
  2. 能用set就不用list,因为set是无序的,比list少生成一个下标字段
  3. table属性可以省略,默认表名和对应的实体类的数组或集合等属性名一致, column属性可以省略,默认字段名和实体类属性名一致,type和length也可以省略,默认类型和长度根据上下文判断.
  4. SQL语句中的这种形式属于联合主键,意思是任意一个单独的主键可以重复,但是两个主键完全相同的情况不可以发生.
  5. 每创建一个表都要创建一个对应的映射文件,单向一对多外键设在多的一方,我们在一的那一方添加一个set集合属性,然后在配置文件中添加该属性的对应的外键关联
  6. 注意set集合中的两个对象需要分别save到表中, 后面的user.setGoodsItemSet(goodsItemsset);作用仅仅是给主表中的属性赋值,否则
  7. 查询. 方法是session.load/get(Class class,int id);load和get的区别是load是延迟加载的,查询才会加载,不查询就不会加载.
  8. 只有集合才能clear,对象只能set(null),一对一在丛方解除,一对多在丛方解除,多对多删除中间表数据,实际上解除关系就是让外键关联的值为空就可以了. 

对象的状态

四种:临时态(瞬时态丶新建态)、持久态、游离态、删除态

  1. 瞬时态:对象刚刚创建,对象的数据在表中还没有保存,并且对象也没有在session的缓存中
  2. 持久态:对象的数据已经在表中保存了,并且这个对象也在session的缓存中保存
  3. 游离态:对象的数据在表中存在,但是对象不在session缓存中保存(session被关闭)
  4. 删除态:session调用delete方法对对象进行操作之后
  5. 实际上对象的状态和session的方法调用是有关的,主要是要知道的是用什么方法可以将一个状态改为另一个什么状态
  6. evict()方法的作用是从session缓存中将指定的对象删除

    clear()方法的作用是将session缓存中所有对象删除

hibernate中的缓存

hibernate中的缓存分为两级:一级缓存和二级缓存

一级缓存:session中的缓存

二级缓存:工厂缓存

session中除了一级缓存之外还多了一个快照区.

快照区存在的意义是:

当查询到的对象数据,调用set方法进行数据修改时,如果set方法的调用没有实质性的修改原数据,那么即使session调用update方法想实现update更新操作,但是一级缓存和快照区进行当前对象的对比,发现数据完全相同,因此不会发送update语句;

只有set方法调用数据发生实质性的改变,session调用update方法更新数据时,一级缓存和快照区对比当前对象数据,发现不同,才发送update语句。

猜你喜欢

转载自blog.csdn.net/qq_42837554/article/details/90451780