Как создать запрос JPQL для функции MySql JSON_EXTRACT с помощью EntityManager

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

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

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

и не работает для json_extract funcation + entity manager

 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

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

user3973283 25.11.2018 14:26

Я нашел решение. Query query = em.createQuery ("выберите o из продукта o FUNCTION ('JSON_EXTRACT', o.des, '$ .org') =: org");

Tharaka 25.11.2018 14:49
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
1
2
2 563
1

Ответы 1

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

JPQL documentation has no such function with that name, so hardly surprising that an error occurs. If you want to ram in random SQL functions into JPQL then you use FUNCTION(...) as per all JPA docs tell you

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

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

Другие вопросы по теме