spring数据+视图与union返回重复行

p1iqtdky  于 2021-07-14  发布在  Java
关注(0)|答案(1)|浏览(379)

我使用springboot2.4.2和数据模块来实现jpa。
现在,我使用一个oracle视图,由这个jpa实体Map:

@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;
....

视图使用了一个并集,它允许我获得同一父实体的两个不同属性,因此对于具有此并集的同一父实体(a),我在第1行中获得属性b,在第2行中获得属性c:这意味着这些行将彼此不同。
如果使用oracle客户机运行查询,则会得到预期的结果集:相同的父实体具有两个包含不同属性的不同行。现在的问题是:当我使用spring数据(jpa)运行查询时,我得到了错误的结果集:两行但是重复。
在debug中,我检查执行spring数据的查询是否正确;如果我运行相同的查询,结果集是正确的,但是来自java/spring数据的结果集是错误的。为什么?
谢谢你的支持!

l5tcr1uw

l5tcr1uw1#

我得到了它!我在身份证上错了。
这两行具有相同的父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;

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

相关问题