Сопоставление логического значения Java с столбцом Oracle Number с помощью JPA и Hibernate

У меня есть свойство, созданное в моей модели:

    public class Client {
        private Boolean active;
}

Моя СУБД - это Oracle, а столбец active имеет тип NUMBER(1,0).

Как я могу использовать API ограничений для достижения следующих функций?

criteria.add(Restrictions.eq("active"),object.isActive());

person Rafael Roque    schedule 04.03.2015    source источник


Ответы (2)


Hibernate автоматически сопоставляет Boolean тип Java с Oracle NUMBER(1,0).

Таким образом, вы можете использовать значение Boolean в сопоставлениях сущностей, запросах JPQL или Criteria, и вместо этого сгенерированный SQL будет использовать формат базы данных NUMBER(1,0).

person Vlad Mihalcea    schedule 04.03.2015

Я не рекомендую использовать логическое значение, вы должны использовать логическое значение вместо него, чтобы предотвратить NPE, потому что логическое значение имеет только два доступных значения - истина или ложь. Что означает null для логического значения ?? Это редкий случай, когда вам нужен тип оболочки Boolean. Oracle - число (1) по умолчанию 0 не нуль.

person idmitriev    schedule 27.09.2016
comment
Нулевое логическое значение может означать "неизвестно" или "не указано". Нельзя сказать, что вам всегда нужно это различие. - person Kaypro II; 01.06.2017
comment
в этом случае вам следует использовать Enum, который для этого подходит. Логическое значение означает истина или ложь, не более того. Если вам нужно третье состояние - используйте enum. - person idmitriev; 01.06.2017
comment
Извините, но логическое значение означает истину или ложь, не более того. Логическое значение означает истину, ложь или неопределенное значение. Так же, как разница между длинным и длинным - person Gary Kephart; 26.03.2018
comment
как неуказанное следует рассматривать для логического типа? Если есть более трех значений какого-либо чего-то, это определенно признак того, что это должно быть перечисление. - person idmitriev; 05.04.2018
comment
Если столбец допускает значение NULL, используйте Boolean. Boolean может содержать третью возможность, не определенную. Если столбец не допускает значения NULL, используйте логическое значение. Столбец, допускающий значение NULL, не является причиной для использования Enum. - person riskop; 27.04.2018