没有 createQuery() 的 Hibernate 连接
Hibernate join without createQuery()
我怎样才能做到这一点
session
.createQuery(
"select person from Pet pet " +
"inner join pet.person person " +
"where person.age = 32)
.list();
不是使用 HQL,而是使用 Hibernate 函数,例如 createCriteria()、createAlias()、setProjection() 等?
像这样的东西应该可以工作
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();
我怎样才能做到这一点
session
.createQuery(
"select person from Pet pet " +
"inner join pet.person person " +
"where person.age = 32)
.list();
不是使用 HQL,而是使用 Hibernate 函数,例如 createCriteria()、createAlias()、setProjection() 等?
像这样的东西应该可以工作
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();