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

上一篇: Hibernate HQL to Criteria

下一篇: jpa removing child from collection