【问题标题】:Hibernate criteria eqOrIsNull return wrong value [duplicate]休眠标准eqOrIsNull返回错误值[重复]
【发布时间】:2016-01-15 13:45:37
【问题描述】:

我有映射到数据库的类。 这是我使用休眠的标准 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。当我想在“存档”字段中选择“假”或空的记录时,我使用add(Restrictions.eqOrIsNull("archive", false))。我需要 NULL 或 'false' 的记录。但是当我添加 .add(Restrictions.eqOrIsNull("archive", false)) 时,我得到 0 条记录。

【问题讨论】:

  • 您能描述一下您所面临的具体问题吗?
  • 添加更新,但得到正确答案

标签: java database hibernate


【解决方案1】:

你使用了错误的标准API,eqOrIsNull()的来源

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

仅当value == null 时才添加空检查。你通过value == false

【讨论】:

  • 我认为这对我来说是完美的方法。返回值或如果值等于 null 返回 null。谢谢!
  • @flybox 欢迎您。这是一种不好的限制方法,因为它经常被不当使用。
猜你喜欢
  • 2013-10-19
  • 2014-11-06
  • 1970-01-01
  • 2013-08-30
  • 2011-10-09
  • 2012-12-24
  • 1970-01-01
相关资源
最近更新 更多