Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.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 Hibernate-从联接表获取数据_Java_Hibernate_Criteria - Fatal编程技术网

Java Hibernate-从联接表获取数据

Java Hibernate-从联接表获取数据,java,hibernate,criteria,Java,Hibernate,Criteria,请参见以下关系: Person { long idPerson; String name; @OneToMany( mappedBy="owner", cascade=CascadeType.ALL, fetch=FetchType.EAGER ) List<Pet> pets; } @Inheritance( strategy=InheritanceType.JOINED ) Pet { long idPet; @ManyToO

请参见以下关系:

Person {
    long idPerson;
    String name;

    @OneToMany( mappedBy="owner", cascade=CascadeType.ALL, fetch=FetchType.EAGER )
    List<Pet> pets;
}

@Inheritance( strategy=InheritanceType.JOINED )
Pet {
    long idPet;

    @ManyToOne
    @JoinColumn( name="ID_PERSON", nullable=false )
    Person owner;

    String name;
}

Cat extends Pet { }
Dog extends Pet { }
Dragon extends Pet { }
我如何使用标准来做呢?一个“解决办法”如下所示:

Criteria criteria = session.createCriteria( Cat.class ).list();
// then manually create a List<Person> and add all the Cat.owner to that list
好吧,如果我使用一个每类表策略,这可能会容易得多,但在我的实际项目中,连接的策略最适合

如果可能的话,出于一些“复杂”的原因,我希望避免使用HQL


提前谢谢

试试这个,这就是在继承中检查类的方法

Criteria criteria = session.createCriteria( Person.class).createAlias("pets", "pet").add(Restrictions.eq("pet.class", Cat.class));

抱歉,在此处出错:
criteria.CreateAlias(“Cat”、“Cat”)
将编译,但它将在运行时引发Hibernate异常,表示未找到属性“Cat”。AmitChotaliya给出的解决方案非常有效,谢谢。
SELECT * FROM PERSON, PET, CAT
    WHERE PERSON.ID_PERSON=PET.ID_PERSON AND PET.ID_PET=CAT.ID_PET
        AND PERSON.something=...
        AND PET.something=...
        AND CAT.something=... ( and a lot more... )
Criteria criteria = session.createCriteria( Person.class).createAlias("pets", "pet").add(Restrictions.eq("pet.class", Cat.class));