Hibernate标准eqOrIsNull返回错误值

时间:2016-01-15 13:45:37

标签: java database hibernate

我有一个映射到db的类。 这是我使用hibernate的标准API函数:

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

如果没有eqOrIsNull,我在DB中有8条archieve = 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_p等于null。当我想要选择记录为&#39; false&#39;或者归档&#39;归档&#39;字段,我使用add(Restrictions.eqOrIsNull("archive", false))。我需要使用NULL或使用&#39; false&#39;的记录。但是当我添加.add(Restrictions.eqOrIsNull("archive", false))时,我在结果中得到0条记录。

1 个答案:

答案 0 :(得分:2)

您使用错误的条件API,即eqOrIsNull()

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

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