У меня есть таблица 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
Я нашел решение. Query query = em.createQuery ("выберите o из продукта o FUNCTION ('JSON_EXTRACT', o.des, '$ .org') =: org");






Как сказал Билли:
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");
«Не работает» означает, что в документации JPQL нет такой функции с таким именем, поэтому неудивительно, что возникает ошибка. Если вы хотите использовать случайные функции SQL в JPQL, используйте
FUNCTION(...)в соответствии со всеми документами JPA. Другими словами, прочтите документацию