Java 不带createQuery()的Hibernate联接
我怎样才能做到这一点Java 不带createQuery()的Hibernate联接,java,sql,hibernate,criteria,projection,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()等?类似的功能应该可以工
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();
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();
createAlias
仅用于与Pet
进行内部连接,前提是要列出所有32岁且有宠物的人
编辑在对模型和需求进行评论后,尝试以下操作。不漂亮,但应该有用
Criteria crit = session.createCriteria(Person.class);
crit.createAlias("pet", "pet");
crit.add(Restrictions.eq("age", 32);
crit.list();
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();
criteriac=session.createCriteria(Person.class,“Person”);
c、 增加(限制,情商(“年龄”),32);
DetachedCriteria dc=DetachedCriteria.forClass(Pet.class,“Pet”);
dc.add(Property.forName(“pet.person_id”).eqProperty(“person.id”));
c、 add(subquerys.exists(dc.setProjection(Projections.id())));
列出人员=c.列表();
人与宠物有关系吗?不,我想这是我的主要问题。没有从Person->Pet的映射,只有Pet->Person。查询应该返回所有32岁的人,他们都有与他们相关的宠物?完全一样,就像给定的HQL一样。我认为这不会起作用,因为Person不知道它有宠物,只有Pet知道它有人。我已经编辑了我的答案,希望这个新代码能起作用。