使用 Hibernate 从 PostgreSQL 中的 JSONArray 获取对象的问题
Posted
技术标签:
【中文标题】使用 Hibernate 从 PostgreSQL 中的 JSONArray 获取对象的问题【英文标题】:Problem in getting object from JSONArray in PostgreSQL using Hibernate 【发布时间】:2019-02-15 15:18:52 【问题描述】:我想在 Spring Boot 应用程序中使用 Hibernate 从 PostgreSql 数据库的查询返回值的 JsonArray 中检索一个对象。但是我遇到了一个异常 '>' is unexpected token,尽管我的查询在 pgAdmin4 查询工具中运行良好,下面是我的代码 sn-p。
@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)
请帮助实现这一目标或建议我在不更改查询的情况下解决问题。提前致谢。
【问题讨论】:
JSON_AGG(items)->>0
语法是什么?
一个 postgres 实用函数,用于将查询结果转换为 json 对象数组。
我知道JSON_AGG
函数是什么。但是->>0
是干什么用的?我不知道那个语法。而 postgres 显然也...
从 json 数组中检索第一个对象
【参考方案1】:
您使用的 API 方法 (entityManager.createQuery(String)
) 是按照 javadoc 中的说明执行 JPQL 查询:
创建 Query 实例以执行 Java Persistence 查询语言语句。
您要执行的查询是 SQL 查询。您应该在EntityManager
上使用createNativeQuery(String)
方法。
【讨论】:
以上是关于使用 Hibernate 从 PostgreSQL 中的 JSONArray 获取对象的问题的主要内容,如果未能解决你的问题,请参考以下文章
使用 PostgreSQL 的 Hibernate import.sql 重复主键
使用 JPA/Hibernate 将 Spring Boot 连接到 PostgreSql 数据库时失败
如果我将数据源从 `H2` 切换到 `postgresql`,`hibernate.hbm2ddl.import_files` 属性将停止工作
使用 Hibernate 注释映射 PostgreSQL 串行类型