1

我有一个名为角色的表。每个角色可能属于一个组织。不属于组织的角色的值为 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

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

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

4

2 回答 2

3

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

You'll need to construct your criteria as follows:

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));
于 2011-01-31T10:20:50.623 回答
1
IllegalArgumentException occurred calling getter com.myname.models.Organiation.id

这似乎表明您在某处使用“组织”,而这可能应该是“组织”。

于 2011-01-17T17:32:37.127 回答