DetachedCriteria criteria = DetachedCriteria.forClass(USER.class); criteria.setFetchMode("property", FetchMode.JOIN) criteria.setFetchMode("property.contact", FetchMode.JOIN); List<USER> users = getHibernateTemplate().findByCriteria(criteria);
@Override public List<UserSubstitution> findAllEagerUserFetch() { DetachedCriteria criteria = getDetachedCriteria() .setFetchMode(UserSubstitution._USER, FetchMode.JOIN) .setFetchMode(UserSubstitution._USER_SUBSTITUTE, FetchMode.JOIN); return findByCriteria(criteria); } }
@Override public Query join(String property) { this.hasJoins = true; if(criteria != null) criteria.setFetchMode(property, FetchMode.JOIN); else if(detachedCriteria != null) detachedCriteria.setFetchMode(property, FetchMode.JOIN); return this; }
@Override public Query select(String property) { this.hasJoins = true; if(criteria != null) criteria.setFetchMode(property, FetchMode.SELECT); else if(detachedCriteria != null) detachedCriteria.setFetchMode(property, FetchMode.SELECT); return this; }
protected void applyFetchStrategies() { for (Map.Entry<String, FetchType> entry : fetchStrategies.entrySet()) { switch(entry.getValue()) { case EAGER: if(criteria != null) criteria.setFetchMode(entry.getKey(), FetchMode.JOIN); else if(detachedCriteria != null) detachedCriteria.setFetchMode(entry.getKey(), FetchMode.JOIN); break; case LAZY: if(criteria != null) criteria.setFetchMode(entry.getKey(), FetchMode.SELECT); else if(detachedCriteria != null) detachedCriteria.setFetchMode(entry.getKey(), FetchMode.SELECT); break; } } }
@Override public void visitFetch(final Fetch fetch) { switch (fetch.getFetchType()) { case DEFAULT: m_criteria.setFetchMode(fetch.getAttribute(), FetchMode.DEFAULT); break; case EAGER: m_criteria.setFetchMode(fetch.getAttribute(), FetchMode.JOIN); break; case LAZY: m_criteria.setFetchMode(fetch.getAttribute(), FetchMode.SELECT); break; default: m_criteria.setFetchMode(fetch.getAttribute(), FetchMode.DEFAULT); break; } }
Session s = ((HibernateEntityManager) em).getSession().getSessionFactory().openSession(); DetachedCriteria dc = DetachedCriteria.forClass(MyEntity.class).add(Expression.idEq(id)); dc.setFetchMode("innerTable", FetchMode.JOIN); Criteria c = dc.getExecutableCriteria(s); MyEntity a = (MyEntity)c.uniqueResult();
DetachedCriteria criteria = session.createCriteria(Item.class, "i"); criteria.setFetchMode("bids", FetchMode.JOIN); DetachedCriteria bidCriteria = DetachedCriteria.forClass(Bid.class, "b"); bidCriteria.add(Restrictions.gt("amount", 100)); bidCriteria.add(Restrictions.eqProperty("b.itemId", "i.id")); criteria.add(Subqueries.exists(bidCriteria.setProjection(Projections.property("b.id"))));