2

我想用这个人作为电话 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)));

如何构造嵌套对象?

4

0 回答 0