Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 不带createQuery()的Hibernate联接_Java_Sql_Hibernate_Criteria_Projection - Fatal编程技术网

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知道它有人。我已经编辑了我的答案,希望这个新代码能起作用。