博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hibernate一级缓存
阅读量:5160 次
发布时间:2019-06-13

本文共 1753 字,大约阅读时间需要 5 分钟。

1.三种查询方式:

     1.1.HQL语句:批量查询时,查询结果会进入缓存中。(先查询list,再查询单条记录,只打印一条语句),HQL不会使用一级缓存。(重复的查询,结果只打印一条SQL)

  1.2.SQL查询:如果把查询结果封装到对象中,对象会放入到一级缓存中,如果没有将查询结果放到对象中,不会放到一级缓存中

  1.3.criteria查询:会将查询结果放入到一级缓冲中,但是查询不会使用一级缓存(与HQL查询的结论相似)

2.缓存中的数据与数据库中的不同步,会优先使用缓存中的。

     使用JDBC,在一级缓存中出现该问题的几率比较小。

     一级缓存的生命周期:opeansession,一级缓存生命周期开始,session.close();一级缓存销毁

3.其他的API(了解

  3.1evict将缓存中的对象删除

      3.2clear清空1级缓存

   3.3refresh 刷新,强制刷新缓冲的对象(可以解决缓存不同步的问题),调用方法时会发送一个sql语句给数据库

   3.4flush对比快照,并提交缓存对象。

    User u1=(User)session.get(User.class,1l);    u1.setName("zhangsan");    session.flush();  //同步,执行update语句

  3.5自然主键=>assigned

    update 与saveorUpdate 方法

          saveorUpdate,可以同时完成保存或者更新操作

     主键为空=》报错,无id

       主键有值=》存在update,不存在insert方法

  3.6错误  

  User  u=(User)session.get(User.class,1);  //持久化状态  session.evict(u);                                     //游离状态,缓冲中不存在  User u2=(User)session.get(User.class,1);  //持久化状态,缓存中存在  session.update(u);                                    //持久化状态,缓存中存在  //结果会报错;因为内存当中不存在两个相同的id对应值的对象放入到一级缓存.

4.Hibernate中的关系

        一对多:customer 和订单(多的一方外键)   

   Customer类:private Set
orders = new HashSet
();    Order 类: private Customer customer = new Customer();

      映射文件:

 

    多对多 :老师和学生(建立中间表)

        

      一对一:人和身份证

      (主键同步(即是主键又是外键),任意一方添加主键)

 

5.hibernate 中的inverse(相反的)属性

    问题描述:维护一方的对象时,会自动维护另一方的关系。(两个都要维护)

      例如:删除用户时:会先移除Customer中引用的外键,然后在删除Customer

           保存对象:插入数据,更新外键。维护外键

    解决方案:

      单纯指定关系由一方来维护,另一方不维护关系。含有外键的进行维护(1的一方放弃,多的一方有外键)

      Customer的映射文件,orders的inverse 属性:true 

        保存对象:外键由order维护,customer的外键不需要进行维护(含有外键的order)

        删除对象:删除customer会导致,order引用了无效的id,违反了外键约束,由order来解除外键的约束

 

    inverse的使用场景:如果1的一方经常需要维护外键,在1的一方不需要配置inverse属性

 

 

    

 

  

  

转载于:https://www.cnblogs.com/glblog/p/6111754.html

你可能感兴趣的文章
jQuery - 控制元素显示、隐藏、切换、滑动的方法
查看>>
postgresql学习文档
查看>>
Struts2返回JSON数据的具体应用范例
查看>>
js深度克隆对象、数组
查看>>
socket阻塞与非阻塞,同步与异步
查看>>
团队工作第二天
查看>>
System类
查看>>
tableView
查看>>
Happy Great BG-卡精度
查看>>
Xamarin Visual Studio不识别JDK路径
查看>>
菜鸟“抄程序”之道
查看>>
Ubuntu下关闭防火墙
查看>>
TCP/IP 邮件的原理
查看>>
原型设计工具
查看>>
windows下的C++ socket服务器(4)
查看>>
css3 2d转换3d转换以及动画的知识点汇总
查看>>
【Java】使用Eclipse进行远程调试,Linux下开启远程调试
查看>>
对Vue为什么不支持IE8的解释之一
查看>>
计算机改名导致数据库链接的诡异问题
查看>>
Java8内存模型—永久代(PermGen)和元空间(Metaspace)(转)
查看>>