spring - Spring Data + View with Union 返回重复行
问题描述
我正在使用 Spring Boot 2.4.2 和数据模块来实现 JPA。
现在,我正在使用由这个 JPA 实体映射的 Oracle 视图:
@Entity
@Immutable
@Table(name = "ORDER_EXPORT_V")
@ToString
@Data
@NoArgsConstructor
@EqualsAndHashCode(onlyExplicitlyIncluded = true)
public class OrderExportView implements Serializable {
private static final long serialVersionUID = -4417678438840201704L;
@Id
@Column(name = "ID", nullable = false)
@EqualsAndHashCode.Include
private Long id;
....
该视图使用一个 UNION,它允许我获取同一父实体的两个不同属性,因此对于具有此 UNION 的一个相同父实体 (A),我在第 1 行中获得属性 B,在第 2 行中获得属性 C:这意味着行将彼此不同。
如果我使用 Oracle 客户端运行查询,我会得到我期望的结果集:相同的父实体具有 2 个包含不同属性的不同行。现在的问题:当我使用 Spring Data (JPA) 运行查询时,我得到了错误的结果集:两行但重复。
在调试中,我检查了执行 Spring Data 的查询,它是正确的;如果我运行相同的查询,结果集是正确的,但来自 Java/Spring Data 不是。为什么??
谢谢你的支持!
解决方案
我知道了!我在 ID 字段中写错了。
两行具有相同的父 id,这对 JPA 不利,它希望每一行都有一个唯一值。所以,现在我在视图中引入了一个 UUID 字段:
sys_guid() AS uuid
在 JPA 实体中:
@Id
@Column(name = "UUID", nullable = false)
@EqualsAndHashCode.Include
private UUID uuid;
@Column(name = "ID")
private Long id;
现在一切正常,因为新字段的每一行都有一个唯一值。
推荐阅读
- regex - 正则表达式 - 提取双方括号之间的内容
- ruby-on-rails - 使用带有rails的mssql连接问题
- laravel - 在 Cloudways 上运行 Laravel Dusk
- asp.net-mvc - 剑道自定义过滤器不刷新剑道网格数据更改
- java - 滚动 RecyclerView
- java - 忘记密码发送邮件给注册用户java
- titanium - 如何使用超循环在钛 android 中使用 Google Maps API 实用程序库中的 PolyUtil.containsLocation 方法
- r - 如何在 R 中的 visreg 中对平方根转换后的数据进行反向转换
- python - 错误 - SSH 操作员错误:连接 ec2 实例时 Airflow 超时
- wordpress - Woocommerce 订单列表中的私人笔记