Hibernate Criteria API。 JOIN的

时间:2013-04-26 15:04:22

标签: java hibernate hibernate-criteria

可以为此SQL构建Criteria查询:

SELECT P.This FROM Position P INNER JOIN PersonOnPosition PP ON PP.Tail = P.This WHERE PP.Tail IS NOT NULL

我想将Hibernate Criteria移植到自定义SQL方言(自定义ECM框架),但我遇到了JOIN'的麻烦。

感谢。

1 个答案:

答案 0 :(得分:1)

正如@Julien Langlois所指出的,这取决于你的实体定义。

假设您定义了类似

的关系
@Entity
class PersonOnPosition {
  @ManyToOne
  @JoinColumn(name="Tail")
  Position position;
}

你可以选择

session.createCriteria(PersonOnPosition.class, "PP")
    .createAlias("position", "P")
    .setProjection(Property.forName("P.This"))
    .add(Property.forName("PP.position").isNotNull())
    .list();

如果未定义关系,则可以使用子查询获得相同的结果:

DetachedCriteria personOnPositionWithTail = DetachedCriteria.forClass(PersonOnPosition.class, "PP")
    .setProjection(Property.forName("PP.Tail"))
    .add(Property.forName("PP.Tail").isNotNull());
session.createCriteria(Position.class, "P")
    .setProjection(Property.forName("P.This"))
    .add(Property.forName("P.This").in(personOnPositionWithTail))
    .list();