Hibernate не знает как конвертер отображает список в столбец.Он не может построить отображение из JPQL ? in userIds
в соответствующий фрагмент SQL, так как ему необходимо знать, как реализован ваш конвертер.
Но вы всегда можете построить этот фрагмент SQL самостоятельно, например:
WHERE concat(',', entity.userIds, ',') LIKE concat('%,', ?, ',%')
Первое concat
должно гарантировать, что выражение соответствует даже первому и последнему значению списка (которое не будет начинаться или заканчиваться разделителем).
Тамдругие специфичные для БД функции, которые можно использовать, но этот пример работает со всеми типами баз данных, о которых я знаю.
Еще одно замечание: Не пытайтесь присоединиться к запросу userIds
- так как он имеет тип basic , даже если это список.См. JavaDoc: @Convert
:
Аннотация Convert используется для указания преобразования базового поля или свойства.
Тем не менее Hibernate будет жаловаться, если вы сравните свойАтрибут напрямую с литералом (entity.userIds = '1'
), потому что тип атрибута не соответствует типу литерала.Но до тех пор, пока вы используете функцию, подобную выше, для обеих сторон сравнения, она не будет жаловаться.