【问题标题】:Spring Data + View with Union return duplicate rowsSpring Data + View with Union 返回重复行
【发布时间】: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 不是。为什么??

感谢您的支持!

【问题讨论】:

标签: spring oracle spring-data-jpa duplicates union


【解决方案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;

现在一切正常,因为新字段的每一行都有一个唯一值。

【讨论】:

    猜你喜欢
    • 2020-12-22
    • 1970-01-01
    • 2015-03-22
    • 1970-01-01
    • 2019-01-06
    • 1970-01-01
    • 2016-06-13
    • 2016-10-29
    • 2016-10-19
    相关资源
    最近更新 更多