gpt4 book ai didi

java - 将数组列映射到 Projection 接口(interface) : No Dialect mapping for JDBC type: 2003

转载 作者:行者123 更新时间:2023-12-03 20:50:05 29 4
gpt4 key购买 nike

我正在尝试将带有连接的 native 查询的结果映射到不是实体的投影(接口(interface))。我必须映射 Postgres 数组 codes| text[]|String[] getCodes();在投影界面。使用 Entity,它可以很容易地映射到下面定义类型,然后注释属性

     @TypeDef(
name = "string-array",
typeClass = StringArrayType.class
)
})
但同样的情况似乎不适用于预测。
有没有办法在不将数组转换为查询本身的文本的情况下对投影做同样的事情?

最佳答案

你的原生查询是做什么的,也许你可以用Blaze-Persistence Entity Views在 JPA/Hibernate 之上而不是留在 JPA 模型的领域?
Blaze-Persistence 是 JPA 之上的查询构建器,它支持 JPA 模型之上的许多高级 DBMS 功能。我在它之上创建了实体 View ,以允许在 JPA 模型和自定义接口(interface)定义模型之间轻松映射,例如 Spring Data Projections on steroids。这个想法是您以您喜欢的方式定义您的目标结构,并通过 JPQL 表达式将属性(getter)映射到实体模型。由于属性名称用作默认映射,因此您通常不需要显式映射,因为 80% 的用例是拥有作为实体模型子集的 DTO。
模型的 DTO 映射可能看起来很简单,如下所示

@EntityView(SomeEntity.class)
interface SomeEntityProjection {
Integer getId();
String[] getCodes();
}
查询是将实体 View 应用于查询的问题,最简单的就是通过 id 进行查询。 SomeEntityProjection dto = entityViewManager.find(entityManager, SomeEntityProjection.class, id);但是 Spring Data 集成允许您几乎像 Spring Data Projections 一样使用它: https://persistence.blazebit.com/documentation/entity-view/manual/en_US/index.html#spring-data-features
它只会获取您告诉它获取的映射。

关于java - 将数组列映射到 Projection 接口(interface) : No Dialect mapping for JDBC type: 2003,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63326408/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com