Hibernate Criteria Query加入Null Value

时间:2011-01-17 16:49:28

标签: java oracle hibernate criteria-api

我有一张叫做角色的桌子。每个角色可能属于一个组织。不属于组织的角色的值为null。我想找到特定组织的所有角色,或者组织在表格中为空的位置。

Criteria criteria = this.sessionFactory.getCurrentSession().createCriteria(Role.class)
.add(Restrictions.or(
    Restrictions.eq("organization",organization.getId()), 
        Restrictions.isNull("organization")));

映射文件包含:

<many-to-one class="com.myname.models.Organization" name="organization">
<column name="organization_id" precision="22" scale="0" />
</many-to-one>

当查询运行时,我得到:

IllegalArgumentException occurred calling getter com.myname.models.Organization.id

我发现如果我修改标准只是在组织上查询空值一切正常,但是一旦我查询了一个值,我就会得到错误。

如何修改查询或映射文件以达到我的目标?

2 个答案:

答案 0 :(得分:3)

不确定您是否仍在寻找答案,但由于我在搜索相同问题的解决方案时遇到过这个问题,我认为它可能对将来的参考有所帮助。

您需要按如下方式构建标准:

final Criterion lhs = Restrictions.eq("organization",organization.getId());
final Criterion rhs = Restrictions.isNull("organization");
Criteria criteria = this.sessionFactory.getCurrentSession().createCriteria(Role.class).add(Restrictions.or(lhs, rhs));

答案 1 :(得分:1)

IllegalArgumentException occurred calling getter com.myname.models.Organiation.id

这似乎暗示你在某个地方使用“组织”,大概应该是“组织”。