Java Hibernate条件查询联接为空值

Java Hibernate条件查询联接为空值,java,oracle,hibernate,criteria-api,Java,Oracle,Hibernate,Criteria Api,我有一张叫做角色的桌子。每个角色可能属于一个组织。不属于组织的角色的值为null。我想在表中查找特定组织的所有角色,或者该组织为空的位置 Criteria criteria = this.sessionFactory.getCurrentSession().createCriteria(Role.class) .add(Restrictions.or( Restrictions.eq("organization",organization.getId()), Restr

我有一张叫做角色的桌子。每个角色可能属于一个组织。不属于组织的角色的值为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.Organiation.id
这似乎表明你正在某个地方使用“组织”,而这应该是“组织”


这似乎表明您正在某个地方使用“Organization”,而这里可能应该是“Organization”。

不确定您是否仍在寻找答案,但由于我在寻找同一问题的解决方案时遇到了这条线索,我认为这可能有助于将来的参考

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

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));

不确定您是否仍在寻找答案,但由于我在搜索同一问题的解决方案时遇到了此线程,我认为它可能有助于将来的参考

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

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));

com.myname.models.Organiation.getId()
是否存在,您是否在其中引发异常?
com.myname.models.Organiation.getId()
是否存在,您是否在其中引发异常?不,必须重新键入代码,因此错误出现在计算机之间的翻译中。不,必须重新键入代码,因此,错误在于计算机之间的翻译。