我有 3 个实体,彼此相关。用户映射为一对多到宠物,宠物映射为多对多到玩具。
用户.java
@Entity
@Table(name = "my_users")
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String surname;
private Integer age;
@OneToMany(mappedBy = "user",fetch = FetchType.EAGER)
private List<Pet> pets;
}
Pet.java
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Entity
public class Pet {
@Id
@GeneratedValue
private Long id;
private String name;
private Integer age;
@ManyToOne
@JoinColumn(name = "user_id")
private User user;
@ManyToMany
@JoinTable(name = "pet_toys",
joinColumns = {@JoinColumn(name = "pet_id")},
inverseJoinColumns = {@JoinColumn(name = "toy_id")})
private List<Toy> toys;
}
玩具.java
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Entity
public class Toy {
@Id
@GeneratedValue
private Long id;
private String name;
@ManyToMany(mappedBy = "toys")
private List<Pet> pets;
}
和存储库UserRepository
@Override
@EntityGraph(attributePaths = {"pets","pets.toys"})
List<User> findAll();
}
当我试图让所有用户及其宠物和宠物玩具收到时,我这样做的原因是因为我想在 1 个 SQL 请求中收到所有数据。
org.hibernate.loader.MultipleBagFetchException: cannot simultaneously fetch multiple bags \[.entity.Pet.toys, .entity.User.pets\]
该异常导致您加载 2 个列表可以包含重复元素。 https://www.baeldung.com/java-hibernate-multiplebagfetchException