Spring Data + View with Union 返回重复行
Posted
技术标签:
【中文标题】Spring Data + View with Union 返回重复行【英文标题】:Spring Data + View with Union return duplicate rows 【发布时间】:2021-07-14 20:19:14 【问题描述】:我正在使用 Spring Boot 2.4.2 和 Data 模块来实现 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 不是。为什么??
感谢您的支持!
【问题讨论】:
看起来像一对多的问题:***.com/questions/16341408/… 【参考方案1】:我明白了!我在 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;
现在一切正常,因为新字段的每一行都有一个唯一值。
【讨论】:
以上是关于Spring Data + View with Union 返回重复行的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot with Spring Data JPA - Concept
SAPUI5使用XML-File作为View with“data-sap-ui-resourceroots”?
Spring Boot with Spring-Data-JPA学习案例
《Pro Spring Boot 2》第五章:Data Access with Spring Boot
Persisting data with object-relational mapping-006Spring-Data的运行规则(@Enabl