当前位置: 首页 > news >正文

[Hibernate] - Fetching strategies

Hibernate中的抓取策略,参考文档:

http://docs.jboss.org/hibernate/orm/3.5/reference/zh-CN/html/performance.html


 

如下代码:

@SuppressWarnings({ "unchecked" })
    public static void main(String[] args) {
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = session.beginTransaction();

        try {
            // ----------------------------------------------------
            // Left join
            // ----------------------------------------------------
            String hql = "SELECT U FROM User U LEFT JOIN FETCH U.cards C WHERE U.userName=:userName AND C.cardID=:cardID";
            Query query = session.createQuery(hql);
            query.setLong("cardID", 1);
            query.setString("userName", "Robin");
            List<User> users = query.list();
            for (User user : users) {
                System.out.println("User ID:" + user.getUserID()
                        + "\tUser name:" + user.getUserName());
            }
            
            Set<UserCard> cards = users.get(0).getCards();
            for(UserCard card : cards){
                System.out.println("Card:" + card.getCardName());
            }
            
            tx.commit();
        } catch (Exception e) {
            tx.rollback();
            e.printStackTrace();
        }

        session.close();
    }

 

代码中的红字“FETCH”,如果不加上,那么在之后的cards中,将会把用户的所有cards查询出来。这是在数据库中多加了一次SQL提交查询,没有cardID的条件。

 

此时将看到有两个Card打印出来。

 

如果加上FETCH,那么数据将会加入到缓存当中,当再次调用user的getCards()时,不会再提交SQL查询数据库。

此时将只有一个Card打印出来。

 

使用Hibernate的Criteria的Fetch方法,参考:

User user = (User) session.createCriteria(User.class)
                .setFetchMode("permissions", FetchMode.JOIN)
                .add( Restrictions.idEq(userId) )
                .uniqueResult();

 

相关文章:

  • postgresql基本语句
  • Ubuntu下su模式认证失败的问题解决
  • 自动化实现之Jenkins+TestNG+TestLink
  • 又学到了一些
  • Oracle 监听配置详解(转载)
  • MyEclipse 利用反向功能生成Java 实体类
  • SharePoint Foundation 2013安装-5:初探DPM保护sharepoint
  • 黑马程序员-内存管理
  • 【Spark亚太研究院系列丛书】Spark实战高手之路-第一章 构建Spark集群(第四步)(6)...
  • Flexslider - 响应式的 jQuery 内容滚动插件
  • GPS获取Location 获取所在地点的经纬度
  • 音标输入对照表
  • 注册系统级热键
  • .NET Remoting学习笔记(三)信道
  • DHCP服务器的作用
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • css的样式优先级
  • ES6, React, Redux, Webpack写的一个爬 GitHub 的网页
  • ESLint简单操作
  • exif信息对照
  • github指令
  • Git学习与使用心得(1)—— 初始化
  • Hibernate【inverse和cascade属性】知识要点
  • JAVA_NIO系列——Channel和Buffer详解
  • JAVA多线程机制解析-volatilesynchronized
  • nodejs实现webservice问题总结
  • PHP CLI应用的调试原理
  • Python进阶细节
  • Python十分钟制作属于你自己的个性logo
  • SpiderData 2019年2月16日 DApp数据排行榜
  • storm drpc实例
  • Zepto.js源码学习之二
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 好的网址,关于.net 4.0 ,vs 2010
  • 检测对象或数组
  • 精彩代码 vue.js
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 使用 Docker 部署 Spring Boot项目
  • 微服务入门【系列视频课程】
  • 原生js练习题---第五课
  • 微龛半导体获数千万Pre-A轮融资,投资方为国中创投 ...
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • !$boo在php中什么意思,php前戏
  • #includecmath
  • $GOPATH/go.mod exists but should not goland
  • (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (仿QQ聊天消息列表加载)wp7 listbox 列表项逐一加载的一种实现方式,以及加入渐显动画...
  • (介绍与使用)物联网NodeMCUESP8266(ESP-12F)连接新版onenet mqtt协议实现上传数据(温湿度)和下发指令(控制LED灯)
  • (十二)devops持续集成开发——jenkins的全局工具配置之sonar qube环境安装及配置
  • (一)python发送HTTP 请求的两种方式(get和post )
  • .java 指数平滑_转载:二次指数平滑法求预测值的Java代码
  • .NET Core 中插件式开发实现
  • .NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式