带有并集的Spring Data+View返回重复的行



我使用Spring Boot 2.4.2和Data模块来实现JPA。

现在,我使用一个Oracle视图,由这个JPA实体映射:

@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客户端运行查询,我会得到我期望的结果集:同一个父实体,有两个不同的行,包含不同的属性。现在的问题是:当我使用Spring Data(JPA(运行查询时,我得到了错误的结果集:两行但重复。

在调试中,我检查执行Spring Data的查询,它是正确的;如果我运行相同的查询,则结果集是正确的,但来自Java/SpringData的结果集则不是。为什么?

感谢您的支持!

我搞定了!我在ID字段里错了。

这两行具有相同的父id,这对JPA不好,因为JPA希望每行都有一个唯一的值。因此,现在我在视图中引入了一个UUID字段:

sys_guid() AS uuid

在JPA实体中:

@Id
@Column(name = "UUID", nullable = false)
@EqualsAndHashCode.Include
private UUID uuid;
@Column(name = "ID")
private Long id;

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

最新更新