首页 > 代码库 > [Hibernate] - Fetching strategies
[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();
[Hibernate] - Fetching strategies
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。