如何在 JpaRepository spring boot 中使用 postgresql array_agg 函数?
Posted
技术标签:
【中文标题】如何在 JpaRepository spring boot 中使用 postgresql array_agg 函数?【英文标题】:how to use postgresql array_agg function in JpaRepository spring boot? 【发布时间】:2021-08-18 10:17:25 【问题描述】:我已经使用 postgresql 创建了新的 Spring Boot 项目。我喜欢使用 JPA Repository 本机查询来使用 posgressql array_agg(ex:get all department),但它在发布时遇到了一些错误。我尝试了一些替代解决方案,但无法获得预期的数据。
错误:
org.springframework.orm.jpa.JpaSystemException:没有 JDBC 类型的方言映射:2003; 嵌套异常是 org.hibernate.MappingException:没有 JDBC 类型的方言映射:2003
预期:应该得到数组或数据列表
@Repository
public interface PostGroupRepository extends JpaRepository<PostGroup, Integer>
@Query(value = "SELECT array_agg(department) FROM boxinfo;", nativeQuery = true)
public Object[] getDept();
【问题讨论】:
你尝试过什么?由于 postgres 返回数据类型 text[] - JPA /Hibernate 将没有数据类型。您需要进行自定义数据类型映射。 我只是尝试了备用查询。如果可能的话,可以举一些自定义数据映射的例子@Lucia vladmihalcea.com/postgresql-array-java-list这个可以查 ***.com/questions/21630370/… 也检查一下 @Lucia 可以直接进入本机查询本身??无需添加额外的工作? 【参考方案1】:第一个解决方案是使用以下依赖项:
<dependency>
<groupId>com.vladmihalcea</groupId>
<artifactId>hibernate-types-52</artifactId>
<version>2.11.1</version>
</dependency>
他已经编写了自定义类型并将其注册到自定义方言中,如下所示
public class CustomPostgreDialect extends PostgreSQL10Dialect
public CustomPostgreDialect()
super();
this.registerHibernateType(2003, StringArrayType.class.getName());
并将这个方言作为spring boot的application.yaml或application.properties中的hibernate方言。
spring.jpa.properties.hibernate.dialect: <packageName>.CustomPostgreDialect
第二种方案是自己写自定义类型,如上图在方言中注册,如果不想使用依赖的话。
【讨论】:
以上是关于如何在 JpaRepository spring boot 中使用 postgresql array_agg 函数?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 JpaRepository spring boot 中使用 postgresql array_agg 函数?
如何使用 Spring Boot JpaRepository 保存多个表
如何在 Spring JpaRepository 中使用 JPQL 选择组中的最新记录?