битовые функции в HibernateEntityQuery - PullRequest
0 голосов
/ 19 сентября 2011

Можно ли использовать битовые функции в запросах с использованием Seam HibernateEntityQuery?

Я только что унаследовал некоторый код, основанный на JSF, Seam & Hibernate.В существующем коде DAO используется HibernateEntityQuery Seam, в частности его поддержка строк выражений ограничения.

До сих пор это работало нормально, но теперь передо мной стоит добавить ограничение к существующему запросу, учитывающее битовое поле .

Код сущности Java использует целочисленное поле для представления набора «дней» через это перечисление:

public enum WEEKDAY {

    MONDAY(1), TUESDAY(2), WEDNESDAY(4), THURSDAY(8), FRIDAY(16), SATURDAY(32), SUNDAY(64) ;

    private int value;

    private WEEKDAY(int value) {
        this.value = value;
    }
}

Целочисленное значение из этого перечисления сохраняется в сущности вint days поле.

Например, если объект содержит понедельник, среду и пятницу, days будет установлен на 1 | 8 | 16, что == 25.

Теперь я хотел бы добавить новое ограничение к запросу, чтобы (например) я мог запросить сущности, для которых дни включают MONDAY OR SATURDAY: 1 | 32 == 33, поэтому в SQL я бы сделал:

select id from entity where (select days & 33) > 0;

Существует ли такой синтаксис для HibernateEntityQuery?Я попытался добавить следующее ограничение:

entity.days & #{myQuery.bitwiseMeetingDays} > 0

, что приводит к следующей ошибке:

org.hibernate.QueryException: unexpected char: '&'

1 Ответ

0 голосов
/ 24 октября 2011

Я закончил рефакторинг таблицы, чтобы в ней было 7 логических полей, а не одно целое число для «дней».Это также упрощает запросы командной строки.

Хотя было бы неплохо узнать о способе обработки запроса битового поля.

...