2016-01-15 4 views
1

У меня есть класс, который отображается на db. Это мой критерий API функция спящего режима:Критерий спящего режима eqOrIsNull возвращает неправильное значение

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

Без eqOrIsNull У меня есть 8 записей с нулевым = АРХИВ в БД.

Мой класс:

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: Точное explanaition
У меня есть 8 записей в базе данных с archive_p равна нулю. Когда я хочу выбрать записи с «ложным» или «нулевым» в поле «архив», я использую add(Restrictions.eqOrIsNull("archive", false)). Мне нужны записи с NULL или с «false». Но когда я добавляю .add(Restrictions.eqOrIsNull("archive", false)), я получаю 0 записей.

+0

можете ли вы описать точный вопрос, с которым вы столкнулись? –

+0

добавьте обновление, но получите правильный ответ – flybox

ответ

2

Вы используете неправильный критерии API, источник eqOrIsNull()

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

Он добавляет Null только проверить, если value == null. Вы проходите value == false.

+0

Я думаю, что это идеальный метод для меня. возвращаемое значение или значение равно null null null. Благодаря! – flybox

+0

@flybox Добро пожаловать. Это плохой метод ограничения, потому что он используется ненадлежащим образом. –

Смежные вопросы