Сбой фильтра сеанса гибернации с двоичным идентификатором UUID/двоичным параметром

#mysql #hibernate #jpa

#mysql #зимовать #jpa

Вопрос:

Я пытаюсь применить фильтр к запросу таблицы, содержащей двоичное(16) представление UUID, однако я получаю сообщение об ошибке:

 java.lang.IllegalArgumentException: Incorrect filter parameter [accountId]  at org.hibernate.internal.FilterImpl.setParameter(FilterImpl.java:80) ~[hibernate-core-5.4.32.Final.jar:5.4.32.Final]  

Я пробовал эти два объявления фильтра

 @FilterDef(name="accountFilter", parameters=@ParamDef( name="accountId", type="binary" ) ) @Filter(name="accountFilter", condition=":accountId = account_id")  

и

 @FilterDef(name="accountFilter", parameters=@ParamDef( name="accountId", type="binary" ) ) @Filter(name="accountFilter", condition="UUID_TO_BIN(:accountId) = account_id")  

Создание фильтра с toString помощью метода UUIDs:

 enableFilter(ACCOUNT_FILTER, "accountId", currentUser.getAccount().getId().toString());  

И то и другое приводит к одной и той же ошибке.

Использование MySQL 8.0.23 и гибернации 5.4.32. Столбец определяется как двоичные(16) данные

Ответ №1:

У меня была перевернутая функция UUID предложения WHERE. Это должно выглядеть так:

 @FilterDef(name="accountFilter", parameters=@ParamDef( name="accountId", type="string" ) ) @Filter(name="accountFilter", condition=":accountId = UUID_TO_BIN(account_id)")  

С помощью строки, передаваемой в качестве параметра фильтров.