我嘗試從兩個表(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條經驗 獲得超6個贊
刪除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
提交
取消