我遇到一个问题:JpaRepository.findBy...()
错误地返回具有空集合的对象(ManyToMany),而JpaRepository.findAll()
返回所有字段的完全相同的对象,除了集合现在拥有所有正确的信息
实体:
注意:这些实际模型比较复杂,我将它们剥离以避免混乱。如果任何其他领域或内部关系可能影响我试图完成的结果,请告诉我,我将添加更多信息。
软件包:
@Entity
@Table(name = "bundle")
public class Bundle implements Serializable {
@Id
@GeneratedValue(generator = "system-uuid")
@GenericGenerator(name = "system-uuid", strategy = "uuid2")
private String id;
@Column(name = "name", unique = true, nullable = false)
private String bundleName;
@ManyToMany(mappedBy="clientBundles", fetch = FetchType.EAGER)
private Set<Client> clients = new HashSet<>();
}
客户端:
@Entity
@Table(name = "client")
public class Client {
@Id
@GeneratedValue(generator = "system-uuid")
@GenericGenerator(name = "system-uuid", strategy = "uuid2")
@Column(name = "client_id", unique = true, nullable = false)
private String clientId;
@JoinTable(
name = "client_bundle",
joinColumns = { @JoinColumn(name = "client_id") },
inverseJoinColumns = { @JoinColumn(name = "bundleName") }
)
@Column(name = "bundles")
@ManyToMany(fetch = FetchType.EAGER)
private Set<Bundle> clientBundles = new HashSet<>();
}
对于这两个,我有一个扩展JpaRepository<T, ID>
的标准接口。
例如,如果我的Bundle
有Client
个,{I} bundleJpaRepository.findAll()
,我可以看到clients
集合有这2个客户端
但如果我bundleJpaRepository.findById(...)
我得到相同的Bundle
,但clients
集合为0。
为什么会这样?