我 有 两 个 实体 A 、 B 、 C , 它们 具有 以下 Map 。
@Enttiy
class A {
@OneToMany
private List<B> Bs;
}
@Entity
class B {
@OneToMany
private List<C> Cs;
}
@Entity
class C {
private Double x1;
private Double y1;
private Double z1;
private Double x2;
private Double y2;
private Double z2;
//...
}
中 的 每 一 个
类 C 是 从 CSV Map 的 表 , 因此 具有 许多 列 。
在 我 的 代码 中 , 我 需要 使用 aRespository.findAll(spec)
并 迭代 所有 B 和 它 的 所有 C 。 用户 可以 选择 C 的 列 的 子集 ( 比如 [x1, x2, z2]
) 。 因此 , sql select from table 将 被 简化 为 select x2, x2, z2 form C
。
使用 ResultTransformer 编写 一 个 自 定义 查询 是 最 好 的 选择 吗 ? 或者 有 更 简单 的 选择 。 因为 查询 是 为 实体 A 编写 的 , 但 只 修改 了 实体 C 。 如果 可能 的 话 , 我 还 希望 保留 惰性 加载 。
- 谢谢 - 谢谢
1条答案
按热度按时间3bygqnnd1#
我认为你应该使用DTO方法。基本属性的延迟加载需要额外的设置,这并不值得。最好尽可能多地告诉数据库你需要什么数据。
我认为这是一个完美的Blaze-Persistence实体视图用例。
我创建这个库是为了允许在JPA模型和自定义接口或抽象类定义的模型之间进行简单的Map,就像Spring Data Projections一样。其思想是您可以按照自己喜欢的方式定义目标结构(域模型),并通过JPQL表达式将属性(getter)Map到实体模型。
使用Blaze-Persistence Entity-Views时,您的用例的DTO模型可能如下所示:
查询是将实体视图应用于查询的问题,最简单的是按id查询。
ADto a = entityViewManager.find(entityManager, ADto.class, id);
Spring Data 集成允许您像Spring Data 投影一样使用它:https://persistence.blazebit.com/documentation/entity-view/manual/en_US/index.html#spring-data-features
最好的部分是,它只会获取实际需要的状态!