[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();
时间: 2024-10-17 20:50:28

[Hibernate] - Fetching strategies的相关文章

Hibernate 优化技术之抓取策略(Fetching strategies)

一.前言 转载请标明出处:http://blog.csdn.net/wlwlwlwl015/article/details/42705585 使用hibernate一年多了,一直觉得他是一个很好用的持久层框架,在处理含有多个复杂的关联关系的数据表时,hibernate提供的各种关联映射可以让我们用少量的代码快速.便捷的去维护各种外键关系,当然他的核心还是允许我们以"面向对象"的方式去操作数据表,因为我们的Java语言就是面向对象的,所以我们使用ORM的持久层框架应该更容易理解和上手,他

Hibernate 之QBC

转自:http://blog.csdn.net/agromach/article/details/1932290 一.Hibernate 中聚合函数的使用 Criteria接口的Projections类主要用于帮助Criteria接口完成数据的分组查询和统计功能: List cats=session.createCriteria(Cat.class)               .setProjection(Projections.projectionList()               .

Hibernate Hql 总结

1.from子句 Hibernate中最简单的查询语句的形式如下: from eg.Cat该子句简单的返回eg.Cat类的所有实例. 通常我们不需要使用类的全限定名, 因为 auto-import(自动引入) 是缺省的情况. 所以我们几乎只使用如下的简单写法: from Cat大多数情况下, 你需要指定一个别名, 原因是你可能需要 在查询语句的其它部分引用到Cat from Cat as cat这个语句把别名cat指定给类Cat 的实例, 这样我们就可以在随后的查询中使用此别名了. 关键字as

HQL: Hibernate查询语言

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

Hibernate之Criteria的完整用法

Criteria的完整用法 QBE (Query By Example) Criteria cri = session.createCriteria(Student.class); cri.add(Example.create(s)); //s是一个Student对象 list cri.list(); 实质:创建一个模版,比如我有一个表serial有一个 giftortoy字段,我设置serial.setgifttoy("2"), 则这个表中的所有的giftortoy为2的数据都会出来

hibernate hql 大全

hibernate hql 大全 http://blog.chinaunix.net/article.php?articleId=47942&blogId=1655 HQL: Hibernate查询语言 Hibernate配备了一种非常强大的查询语言,这种语言看上去很像SQL.但是不要被语法结构 上的相似所迷惑,HQL是非常有意识的被设计为完全面向对象的查询,它可以理解如继承.多态 和关联之类的概念. 第 15 章 HQL: Hibernate查询语言 Hibernate配备了一种非常强大的查询

类型:。net;问题:HQL;结果:HQL: Hibernate查询语言

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

HQL: The Hibernate Query Language

Chapter 14. HQL: The Hibernate Query Language 14.1. Case Sensitivity 14.2. The from clause 14.3. Associations and joins 14.4. Forms of join syntax 14.5. Referring to identifier property 14.6. The select clause 14.7. Aggregate functions 14.8. Polymorp

HQL语句大全

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