当我尝试从数据库获取用户对象时,仅当
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;
...
}
我找到了解决方案。您需要自己生成 hashcode 和 equals,而不是由 Lombok 生成。
https://jpa-buddy.com/blog/lombok-and-jpa-what-may-go-wrong/