Я определил named-native-query в моем файле query.hbm.xml.
<named-native-query name="getEntityxByVal" result-class="com.app.core.model.Entityx">
<query>
<![CDATA[
select * from entityx where JSON_SEARCH(properties->'$.val', 'one', :val) is not NULL
]]>
</query>
</named-native-query>
В моей базе данных mysql у меня есть таблица entityx, в которой есть свойства столбца с типом json. В этом json у меня есть ключ 'val', который содержит массив строк.
Значение свойства столбца
{
'val': ['val1', 'val2]
}
Я использую jpa, где мой код для выполнения вышеуказанного запроса выглядит следующим образом.
public Optional<Entityx> getByVal(String val) { // val = "val1"
Query query = getEntityManager().createNamedQuery("getEntityxByVal");
query.setParameter("val", val);
try {
return query.getSingleResult());
} catch (NoResultException e) {
return Optional.empty();
}
}
Это прекрасно работает, когда я звоню с использованием API. Но когда я запускаю его, тесты junit типа
@Test
public void checkPersistAndFetchByVal() throws IOException {
Entityx expectedEntityx = getEntityx("entityx");
entityxRepository.persist(expectedEntityx);
Optional<Entityx> entityx = entityxRepository.getByVal("imei1");
Assert.assertTrue(entityx.isPresent());
Assert.assertEquals(expectedEntityx, entityx.get());
}
Выдает ошибку - org.hsqldb.HsqlException: пользователю не хватает привилегии или объект не найден: JSON_SEARCH
В чем может быть проблема?