我有一个映射到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条记录。
答案 0 :(得分:2)
您使用错误的条件API,即eqOrIsNull()
public static Criterion eqOrIsNull(String propertyName, Object value) {
return value == null
? isNull( propertyName )
: eq( propertyName, value );
}
仅在value == null
时添加空检查。你通过了value == false
。