我尝试从两个表(Statement、AppCurContract)进行查询,但收到很多重复记录。即使我只从 Statement 进行查询,我也会收到相同的结果。当我将 appCurContracts 字段添加到 Statement bean 时,它就开始了。我在这里发现了同样的问题Spring Data JPA 查询返回重复行而不是实际数据,为什么?但是我在两个表中都有唯一的键。我究竟做错了什么?这是我的代码import com.fasterxml.jackson.annotation.JsonFormat;import lombok.Data;import lombok.EqualsAndHashCode;import javax.persistence.*;import java.time.LocalDateTime;import java.util.Date;import java.util.Set;import java.util.stream.Collectors;import java.util.stream.Stream;@Entity@Table@Data@EqualsAndHashCode(exclude = "appCurContracts")public class Statement { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; private String numStatement; @Column(updatable = false) @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime dateTimeSubmStatement; private int filialId; private int myself; private int status; private Date modifyDate; private String nameNonResident; private String email; private Integer typeStatement; @OneToMany(mappedBy = "statement", cascade = CascadeType.ALL) private Set<AppCurContract> appCurContracts; public Statement() { super(); }
3 回答
ibeautiful
TA贡献1993条经验 获得超5个赞
删除Statement 类上的setAppCurContracts方法。没有必要。
删除@Query 的注释并使用findByStatus方法。
qq_笑_17
TA贡献1818条经验 获得超7个赞
自己定义 hashcode 方法,无论什么必要条件,因为set 使用它来检查重复项。您的代码(在您的存储库实现中)将变为:
List<Statement> findDistinctByEmail(String email);
而且您不需要 Query 注释。
料青山看我应如是
TA贡献1772条经验 获得超8个赞
我找到了解决问题的办法。我在 AppCurContract 类的 Statement 字段中添加了@JsonIgnore注释。
public class AppCurContract {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@JsonIgnore
@ManyToOne
@JoinColumn()
private Statement statement;
private String jurPerson;
private String iin_bin;
private String nameDocument;
private String contractNum;
private String contractDate;
谢谢大家的参与
添加回答
举报
0/150
提交
取消