我想用这个人作为电话 DTO 对象来查询电话列表,但是当我构造一个 DTO 对象时,它提供了一个错误。
Phone Entity:
public class Phone {
@Id
@GeneratedValue
private Long id;
private String number;
@Enumerated(EnumType.STRING)
private PhoneType type;
@ManyToOne
@JoinColumn(name = "person_id")
private Person person;
}
Person Entity:
public class Person {
@Id
@GeneratedValue
private long id;
private String name;
private String nickName;
private String address;
private LocalDateTime createdAt;
@Version
private int version;
@OneToMany(mappedBy = "person" cascade = CascadeType.ALL)
private List<Phone> phones;
}
Phone DTO:
public class PhoneDTO {
private Long id;
private String number;
private PhoneType type;
private PersonDTO person;
}
Person DTO:
public class PersonDTO {
private long id;
private String name;
private String nickName;
private String address;
private LocalDateTime createdAt;
private int version;
}
条件查询:
CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<PhoneDTO> criteriaQuery = builder.createQuery(PhoneDTO.class);
Root<Phone> root = criteriaQuery.from(Phone.class);
Join<Phone, Person> person = root.join("person");
Path<Object> id = root.get("id");
Path<Object> number = root.get("number");
Path<Object> type = root.get("type");
Path<Object> personId = person.get("id");
Path<Object> name = person.get("name");
Path<Object> nickName = person.get("nickName");
Path<Object> address = person.get("address");
Path<Object> createdAt = person.get("createdAt");
Path<Object> version = person.get("version");
criteriaQuery.select(builder.construct(PhoneDTO.class, id, number, type, builder.construct(PersonDTO.class, personId, name, nickName, address, createdAt, version)));
TypedQuery<PhoneDTO> query = em.createQuery(criteriaQuery);
这个怎么做??
criteriaQuery.select(builder.construct(PhoneDTO.class, id, number, type, builder.construct(PersonMediumDTO.class, personId, name, nickName, address, createdAt, version)));
如何构造嵌套对象?