使用Criterias在Hibernate中进行多对一搜索

时间:2016-08-31 07:25:10

标签: java hibernate

我有两个模特,俱乐部和位置。俱乐部只能有一个位置,一个位置可以有许多俱乐部。在我的pojo课程中,我将这两个定义如下:

// Club.java
public class Club {
    private Location location;
    // some other attributes and getters/setters
}

// Location.java
public class Location {
    private int id; // primary key
    // some attribues and getters/setters
}

我的hibernate映射是:

// some other mappings, foreign key is "location" column in my actual table, as // can be seen below
<many-to-one name="location" column="location" class="path/to/Club.java">

我需要按位置搜索分会 。我使用如下标准,

Criteria crit = session.createCriteria(Club.class);
crit.createAlias("location.id", "location");
crit.add(Restrictions.eq("location", locationId);

然而,我收到错误 hibernate.QueryException:不是关联:id

每当我尝试更换&#34; location.id&#34;使用&#34; location&#34;,然后在调用getter Location.id 错误时出现 IllegalArgumentException。到目前为止,我无法通过两种方式实现目标。几天来一直在网上搜索它,但没有一个是有用的。这有什么问题?

1 个答案:

答案 0 :(得分:3)

Criteria.createAlias用于关联而非实体属性。请参阅java文档。

根据您的要求,它应该像

Criteria crit = session.createCriteria(Club.class);
crit.createAlias("location", "location");
crit.add(Restrictions.eq("location.id", locationId);

我没有测试过代码。让我们知道它是怎么回事。