Spring Data JPA - 多对多 - Set 返回空集合

问题描述 投票:0回答:1

当我尝试从数据库获取用户对象时,仅当

observed
的集合为
Set
类型时,才会返回空集合。

用户类别:

@Entity
@Table(name = "users")
@Data
public class User implements UserDetails {
    ...

    @OneToMany(
            mappedBy = "user",
            cascade = CascadeType.ALL
    )
    @JsonIgnore
    private Set<Offer> offers;

    @ManyToMany
    @JoinTable(
            joinColumns = @JoinColumn(name = "user_id"),
            inverseJoinColumns = @JoinColumn(name = "offer_id")
    )
    private Set<Offer> observed;

    ...
}

提供课程:

@Entity
@Table(name = "offers")
@Data
public class Offer {
    ...

    @ManyToOne
    @JoinColumn(name = "user_id")
    private User user;

    @ManyToMany(mappedBy = "observed")
    @JsonIgnore
    private Set<User> observers;
 
    ...
}

当我将集合

observed
Set
更改为
List
时,一切正常。

用户类别:

@Entity
@Table(name = "users")
@Data
public class User implements UserDetails {
    ...

    @OneToMany(
            mappedBy = "user",
            cascade = CascadeType.ALL
    )
    @JsonIgnore
    private Set<Offer> offers;

    @ManyToMany
    @JoinTable(
            joinColumns = @JoinColumn(name = "user_id"),
            inverseJoinColumns = @JoinColumn(name = "offer_id")
    )
    private List<Offer> observed;

    ...
}
java spring spring-boot hibernate spring-data-jpa
1个回答
0
投票

我找到了解决方案。您需要自己生成 hashcode 和 equals,而不是由 Lombok 生成。

https://jpa-buddy.com/blog/lombok-and-jpa-what-may-go-wrong/

© www.soinside.com 2019 - 2024. All rights reserved.