没有createQuery()的Hibernate连接

时间:2016-03-31 09:45:08

标签: java sql hibernate criteria projection

我怎样才能实现这个目标

session
    .createQuery(
        "select person from Pet pet " +
        "inner join pet.person person " +
        "where person.age = 32)
    .list();

,而不是使用HQL,使用Hibernate函数,如createCriteria(),createAlias(),setProjection()等?

1 个答案:

答案 0 :(得分:2)

这样的事情应该有效

Criteria crit = session.createCriteria(Person.class);
crit.createAlias("pet", "pet");
crit.add(Restrictions.eq("age", 32);
crit.list();

createAlias仅用于与Pet的内部联接,如果要点列出所有32岁有宠物的人。

编辑在对模型和要求发表评论后,试试这个。不漂亮,但它应该工作

Criteria c = session.createCriteria(Person.class, "person");
c.add(Restrictions.eq("age", 32));
DetachedCriteria dc = DetachedCriteria.forClass(Pet.class, "pet");
dc.add(Property.forName("pet.person_id").eqProperty("person.id"));
c.add(Subqueries.exists(dc.setProjection(Projections.id())));
List<Person> persons = c.list();