Hibernate HQL to Criteria
我正在尝试将简单的HQL转换为Criteria API,任何人都可以帮助我? 这是我的HQL:
SELECT ch FROM Parent p JOIN p.childeren ch WHERE p.id = :id
结果我得到了孩子。 重要的是,从儿童到家长没有任何关系。 Parent中只有像这样的孩子有关系:
@OneToMany(fetch = FetchType.LAZY, cascade = { CascadeType.ALL }) @JoinColumn(name="parent_id") private List children;
我如何使用criteria-api获得相同的结果?
使用Criteria API只获取关联的实体是一个巨大的痛苦。 你需要子查询:
DetachedCriteria subCriteria = DetachedCriteria.forClass(Parent.class);
subCriteria.createCriteria("children", "c");
subCriteria.setProjection(Projections.property("c.id"));
subCriteria.add(Restrictions.eq("id", 1));
// Assuming Children is the name of the class
Criteria criteria = sess.createCriteria(Children.class);
criteria.add(Subqueries.propertyIn("id", subCriteria));
criteria.list();
这个问题的一个可能的解决方案是使用sqlRestriction ,如下例所示,但这不是很好,因为它需要使用数据库列名。
Criteria crit = sessionFactory.getCurrentSession().createCriteria(Child.class); crit.add(Restrictions.sqlRestriction("{alias}.parent_id = ?", parentId, LongType.INSTANCE));
有人有更好的解决方案吗?
你不需要查询这个,因为你可以这样做:
Set<Child> children = session.get(Parent.class, id).getChildren();
children.size(); // trigger lazy initialization
链接地址: http://www.djcxy.com/p/36993.html