zoukankan      html  css  js  c++  java
  • [Hibernate]

    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()
                            + "	User 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();
  • 相关阅读:
    Maya 与 Matlab 数据互联插件使用教程
    代码可视化算法流程
    sql 至少含有
    sql update limit1
    c# windows service 程序
    c#和.net区别
    c#数据库乱码
    c#事件实质
    c#非界面线程控制控件
    mysql唯一查询
  • 原文地址:https://www.cnblogs.com/HD/p/3957926.html
Copyright © 2011-2022 走看看