我有一张叫做角色的桌子。每个角色可能属于一个组织。不属于组织的角色的值为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
我发现如果我修改标准只是在组织上查询空值一切正常,但是一旦我查询了一个值,我就会得到错误。
如何修改查询或映射文件以达到我的目标?
答案 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
这似乎暗示你在某个地方使用“组织”,大概应该是“组织”。