Goo*_*ogi 6 java postgresql spring hibernate jpa
我正在尝试将带有联接的本机查询的结果映射到不是实体的投影(接口)。我必须将 Postgres数组 codes| text[]|映射
到String[] getCodes();投影界面。使用 Entity,可以轻松映射定义下面的类型,然后注释属性
@TypeDef(
name = "string-array",
typeClass = StringArrayType.class
)
})
Run Code Online (Sandbox Code Playgroud)
但同样的方法似乎不适用于预测。有没有什么方法可以对投影执行相同的操作,而无需将数组转换为查询本身中的文本?
您的本机查询是做什么的,也许您可以在 JPA/Hibernate 之上使用Blaze-Persistence Entity Views,而不是留在 JPA 模型的领域?
Blaze-Persistence 是基于 JPA 的查询生成器,它支持基于 JPA 模型的许多高级 DBMS 功能。我在其之上创建了实体视图,以允许在 JPA 模型和自定义接口定义的模型之间轻松映射,就像类固醇上的 Spring Data Projections 一样。这个想法是,您按照自己喜欢的方式定义目标结构,并通过 JPQL 表达式将属性(getter)映射到实体模型。由于属性名称用作默认映射,因此您通常不需要显式映射,因为 80% 的用例都拥有作为实体模型子集的 DTO。
模型的 DTO 映射可能看起来像下面一样简单
@EntityView(SomeEntity.class)
interface SomeEntityProjection {
Integer getId();
String[] getCodes();
}
Run Code Online (Sandbox Code Playgroud)
查询是将实体视图应用于查询,最简单的就是通过 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
它只会获取您告诉它获取的映射。
| 归档时间: |
|
| 查看次数: |
1090 次 |
| 最近记录: |