CriteriaAPI加入未映射到根实体的实体

时间:2016-02-09 13:56:38

标签: hibernate join criteria-api

我想使用criteriaAPI准备一个简单的SQL查询。假设我有表PERSON列ID和PET_ID表参考表PET。在我的应用程序中,我有Person和PET实体,但是PET没有映射到实体 - 人只保留pet id作为数字。

@Entity
public class Person {

    @Id
    private int id;

    @Column("PET_ID")
    private int petId;
}

@Entity
public class Pet {

    @Id
    private int id;

}

这些只是示例,但它足以显示我想要实现的目标。在Oracle中,我会编写简单的查询:

SELECT _p.id, _pet.id from PERSON _p join PET _pet on _p.pet_id=_pet.id;

但是我无法使用criteriaAPI实现这一点 - 我知道如果我在Person类中映射Pet实体会很容易,但是在下面的示例中我已经花了很多时间而没有找到任何解决方案

1 个答案:

答案 0 :(得分:1)

据我所知,除非在criteria中引用Pet,否则您无法从Person执行此操作。

但是,您可以使用org.hibernate.Query获得所需的结果。 在评论中回复,我会发布所需的代码。

但是,如果有必要使用Criteria获得所需的结果,那么我已经发布了一个临时的Hack,它将适用于您的情况。

List<Integer> allPetIds = session.createCriteria(Pet.class)
            .setProjection(Projections.property("id"))
            .list();

List<Person> persons = session.createCriteria(Person.class)
            .add(Restrictions.in("petId", allPetIds))
            .list();