как создать запрос JPQL для функции MySql JSON_EXTRACT с помощью EntityManager - PullRequest
0 голосов
/ 25 ноября 2018

У меня есть таблица MySQL и используется столбец Тип данных json .Я хочу выполнить запрос со столбцом в качестве условия. С JPQL я могу написать его, как показано ниже, используя EntityManager.

Это полностью работает для ниже (выберите все продукты)

 Query query = em.createQuery("select o from Product o"); 

и не работает для функции json_extract + менеджер сущностей

 Query query = em.createQuery("select o from Product o where json_extract(o.des,'$.org') = 'ABC'");

, это совершенно не работает для меня и возвращает ошибку ниже

java.lang.IllegalArgumentException: An exception occurred while creating a query in EntityManager: 
Exception Description: Syntax error parsing [select o from Product o where json_extract(o.des,'$.org') = 'ABC']. 
[41, 85] The expression is not a valid conditional expression.

Caused by: org.eclipse.persistence.exceptions.JPQLException: 
Exception Description: Syntax error parsing [select o from Product o where json_extract(o.des,'$.org') = 'ABC']. 
[41, 85] The expression is not a valid conditional expression.

, тогда я попытался CrudRepository и это сработало, но мне нужно использовать EntityManager вместо CrudRepository

public interface ProductRepository extends CrudRepository<Product, String> {

    @Query(value = "select o from Product o where json_extract(o.des,'$.org') = :org")
    List<Product> findProdcutsByOrgJPQL(@Param("org") String org);
}

Так что с моим JPQL проблем нет.проблема с EntityManager .

как мне создать JPQL-запрос для JSON_EXTRACT с помощью EntityManager

1 Ответ

0 голосов
/ 20 декабря 2018

Как сказал Билли:

Документация JPQL не имеет такой функции с таким именем, поэтому неудивительно, что возникает ошибка.Если вы хотите интегрировать случайные функции SQL в JPQL, то вы используете FUNCTION (...), как говорят все документы JPA

Я нашел решение:

Query query = em.createQuery("select o from Product o FUNCTION('JSON_EXTRACT', o.des, '$.org') = :org");
...