这个问题已经有了答案:
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
。