#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)")
С помощью строки, передаваемой в качестве параметра фильтров.