我想使用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实体会很容易,但是在下面的示例中我已经花了很多时间而没有找到任何解决方案
答案 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();