这个问题已经有了答案:
How to use Hibernate eqOrIsNull()
2个答案
我有一个映射到数据库的类。
这是我使用Hibernate的Criteria API函数:

public List<Department> getDepartmentBy(Account account)
{
    return createCriteria(Department.class)
            .add(Restrictions.eq("account ", account))
            .add(Restrictions.eqOrIsNull("archive", false))
            .list();
}

如果没有eqorisnull,我有8条记录,其中archieve在db中为null。
我的班级:
private Account _account;
private boolean _archive = false;

@ManyToOne
@JoinColumn(name = "account_l", nullable = false)
public Account getAccount ()
{
    return _account;
}

public void setAccount(Account account)
{
    _account = account;
}

@Column(name = "archive_p")
public boolean isArchive()
{
    return _archive;
}

public void setArchive(boolean archive)
{
    _archive = archive;
}

是虫子吗?或者我使用了错误的标准api?
UPD:精确解释
我在数据库中有8条记录,存档文件等于空。当我想在“archive”字段中选择“false”或空的记录时,我使用add(Restrictions.eqOrIsNull("archive", false))。我需要空的或假的记录。但是当我加上.add(Restrictions.eqOrIsNull("archive", false))时,我得到的结果是0条记录。

最佳答案

您使用了错误的标准api,eqOrIsNull()

public static Criterion eqOrIsNull(String propertyName, Object value) {
    return value == null
            ? isNull( propertyName )
            : eq( propertyName, value );
}

它只在value == null时添加空检查。你通过了value == false

10-05 23:47