首页 > 解决方案 > 如何使用标准构建器返回列表属性?

问题描述

我有 3 节课

@Entity
@Table(name = "usuario")
public class Usuario {
    private Long id;
    private String email;
    private String login;
    private String nome;
    private String fone;
    private String senha;
    private List<Perfil> perfis = new ArrayList<>();
    // getters && setters
}



public class PerfilDTO {
    private Long id;
    private String descricao;
    // getters && setters
}

public class UsuarioDTO {
    private Long id;
    private String email;
    private String login;
    private String nome;
    private String fone;
    private List<PerfilDTO> perfis;

    // Constructor 
   public UsuarioDTO(Long id, String email, String 
   login, String nome, String fone, **List<PerfilDTO> 
   perfis**) {....}

    // getters && setters
}

如何使用标准构建器创建 UsuarioDTO?

    CriteriaBuilder cb = manager.getCriteriaBuilder();
    CriteriaQuery<UsuarioDTO> criteriaQuery = cb.createQuery(UsuarioDTO.class);
    Root<Usuario> rootFrom = criteriaQuery.from(Usuario.class);


criteriaQuery.select(cb.construct(UsuarioDTO.class, 
            rootFrom.get("id"), 
            rootFrom.get("email"),
            rootFrom.get("login"),
            rootFrom.get("fone"),

            **// ***** HERE HOW CREATE A LIST of PerfilDTO to pass to parameters of UsuarioDTO constructor ?**
            rootFrom.get("perfis").get("id"),
            rootFrom.get("perfis").get("descricao")
    ));

第一类 - Usuario.class - 是一个具有 oneToMany 属性的实体(List perfis);

第二类 - PerfilDTO.class - 是一个几乎没有 Perfil 属性的 DTO;

第三类 - UsuarioDTO.class - 是 Usuario 的 DTO,具有很少的 Usuario.class 属性,但具有属性 List perfis。

如果你看到了,我需要创建一个在 UsuarioDTO.class 构造函数中使用的 PerfilDTO 列表。

但是,我该怎么做?

tnx 高级

标签: javajpacriteria-api

解决方案


推荐阅读