码迷,mamicode.com
首页 > 系统相关 > 详细

[Hibernate] - Fetching strategies

时间:2014-09-05 14:10:41      阅读:201      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   os   io   使用   ar   strong   

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的条件。

 

bubuko.com,布布扣

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

 

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

bubuko.com,布布扣

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

 

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

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

 

[Hibernate] - Fetching strategies

标签:style   blog   http   color   os   io   使用   ar   strong   

原文地址:http://www.cnblogs.com/HD/p/3957926.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!