我要写我的表,我将给出主 DTO (WorkerDTO) 和其他 DTO,我想将它们用作主 DTO 的字段。
我想获取包含CarDTO列表的WorkerDTO列表。我怎样才能做到这一点?我想一举完成。我不想一次又一次地去数据库。
我会失去我的小头脑。
@Table(name = "person")
public class Person {
@Id
@Column(name = "id", nullable = false)
private Long id;
@Column(name = "name")
private String name;
@Column(name = "last_name")
private String lastName;
@OneToMany(mappedBy = "personId", cascade = CascadeType.ALL)
private Set<Car> cars = new LinkedHashSet<>();
}
@Table(name = "car")
public class Car {
@Id
@Column(name = "id", nullable = false)
private Long id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "person_id")
private Person personId;
@JoinColumn(name = "motor_id")
private Motor motorId;
@Column(name = "model")
private String model;
@Column(name = "color")
private String color;
}
@Table(name = "motor")
public class Motor {
@Id
@Column(name = "id", nullable = false)
private Long id;
@Column(name = "type")
private String type;
}
public class WorkerDTO {
private string name;
private List<CarDTO> cars;
}
public class CarDTO{
private MotorDTO motor;
private String model;
}
public class MotorDTO{
private String type;
}
我使用 QueryDsl 的 Projections.list(...) 方法左加入汽车列表。
我尝试了@Query(“选择新的WorkerDTO(...”)
我想我会找到像第二个问题一样的问题。
@OneToMany 的默认 FetchType 是 FetchType.LAZY。如果你想让工人拥有装满的汽车,你可以将 FetchType 更改为 EAGER,但不建议这样做。
您可以创建自己的可以返回 List 的方法:
@Query("SELECT DISTINCT person FROM Person person " +
"JOIN FETCH person.cars cars")
或在现有存储库方法上使用 EntityGraph,例如查找全部:
@EntityGraph(attributePaths = {"cars"})