使用 Hibernate 从 PostgreSQL 中的 JSONArray 获取对象时出现问题



我想在 Spring 引导应用程序中使用 hibernate 从 PostgreSql 数据库中的查询返回值的 JsonArray 中检索一个对象。但是我面临着">"是意外令牌的异常,尽管我的查询在 pgAdmin4 查询工具中完美运行,以下为我的代码片段。

@PersistenceContext
private EntityManager entityManager;
@Transactional
public String getItemById(Long id) {
String result = (String) entityManager.createQuery("SELECT JSON_AGG(items)->>0 AS item FROM items WHERE id=:id").setParameter("id", id)
.getResultList().get(0);
System.out.println(result);
return result;
}

例外情况如下:

org.springframework.dao.InvalidDataAccessApiUsageException: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: > near line 1, column 24 [SELECT JSON_AGG(items)->>0 AS item FROM items WHERE id=:id]; nested exception is java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: > near line 1, column 24 [SELECT JSON_AGG(items)->>0 AS item FROM items WHERE id=:id]
at org.springframework.orm.jpa.EntityManagerFactoryUtils.convertJpaAccessExceptionIfPossible(EntityManagerFactoryUtils.java:367)

请帮助实现此目的或建议我在不更改查询的情况下变通方法。提前谢谢。

您使用的 API 方法 (entityManager.createQuery(String)( 是执行 JPQL 查询,如 javadoc 中所述:

创建用于执行 Java 持久性查询语言语句的查询实例。

要执行的查询是 SQL 查询。您应该在EntityManager上使用createNativeQuery(String)方法。

最新更新