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();

[Hibernate] - Fetching strategies的更多相关文章

  1. Hibernate fetching strategies(抓取策略)

    抓取策略(fetching strategies)是指:当应用程序需要在(Hibernate实体对象图的)关联关系间进行导航的时候,Hibernate如何获取关联对象的策略.抓取策略可以在O/R映射的 ...

  2. Hibernate Hql 总结

    1.from子句 Hibernate中最简单的查询语句的形式如下: from eg.Cat该子句简单的返回eg.Cat类的所有实例. 通常我们不需要使用类的全限定名, 因为 auto-import(自 ...

  3. Hibernate之Criteria的完整用法

    Criteria的完整用法 QBE (Query By Example) Criteria cri = session.createCriteria(Student.class); cri.add(E ...

  4. HQL: Hibernate查询语言

    HQL: Hibernate查询语言 Hibernate配备了一种非常强大的查询语言,这种语言看上去很像SQL.但是不要被语法结构 上的相似所迷惑,HQL是非常有意识的被设计为完全面向对象的查询,它可 ...

  5. hibernate hql 大全

    Hibernate配备了一种非常强大的查询语言,这种语言看上去很像SQL.但是不要被语法结构 上的相似所迷惑,HQL是非常有意识的被设计为完全面向对象的查询,它可以理解如继承.多态 和关联之类的概念. ...

  6. HIBERNATE - 符合Java习惯的关系数据库持久化(精华篇)

    HIBERNATE - 符合Java习惯的关系数据库持久化      下一页 HIBERNATE - 符合Java习惯的关系数据库持久化 Hibernate参考文档 3.0.4   目录 前言 1. ...

  7. Hibernate三大类查询总结

    Hibernate目前总共分为三大类查询:cretiria,hql,本地sql [以下篇章搜集于网络,感谢作者] 第一:关于cretiria的查询 具有一个直观的.可扩展的条件查询API是Hibern ...

  8. HQL: The Hibernate Query Language

    Chapter 14. HQL: The Hibernate Query Language 14.1. Case Sensitivity 14.2. The from clause 14.3. Ass ...

  9. 【转】Hibernate 配置

    转自:http://www.blogjava.net/19851985lili/articles/108128.html 由于Hibernate是为了能在各种不同环境下工作而设计的, 因此存在着大量的 ...

随机推荐

  1. PHP 的snmp各个版本的Wrapper封装类

    原文来自:http://blog.chinaunix.net/uid-7654720-id-3211234.html class SNMP_Wrapper { protected $_host; pr ...

  2. Play Framework常用标签list,set,如何遍历list、map类型数据

    最近一段时间的项目都是在Play这个框架上进行开发的,挺强大的,但不足之处也挺多的.今天分享下play中强大的标签,遍历list,map类型的数据的用法. 遍历单纯的list数据,例如:List< ...

  3. 项目乱码 GBK转UTF-8工具

    项目乱码 GBK转UTF-8工具 链接:http://pan.baidu.com/s/1pLw1mMB 密码:rj6c

  4. ZOJ 3805--解题报告

    题目相关: 3805相关链接: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5337 在二维的矩形上, 机器通过管道(pipe ...

  5. docker容器互联

    link方式 http://blog.csdn.net/halcyonbaby/article/details/42112325 通过link方式创建容器,然后我们可以使用被link容器的别名进行访问 ...

  6. Android——进度对话框

    java类代码: //普通进度对话框 public void bt8_onClick(View v) { final ProgressDialog progressDialog = new Progr ...

  7. 深入理解html5系列-文本标签

    转:http://blog.csdn.net/lihui130135/article/details/45150501 文章简介:       关于html5相信大家早已经耳熟能详,但是他真正的意义在 ...

  8. html4.0.1,h5,xhml,文档声明区别

    <!DOCTYPE> 声明不是 HTML 标签:它是指示 web 浏览器关于页面使用哪个 HTML 版本进行编写的指令. 提示:请始终向 HTML 文档添加 <!DOCTYPE> ...

  9. 自定义颜色显示的CheckBox

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  10. HTML DOM参考手册

    HTML DOM是HTML Document Object Model(文档对象模型)的缩写,HTML DOM则是专门适用与HTML/XHTML的文档对象模型.熟悉软件开发的人员可以将HTML DOM ...