Bom dia pessoal,
estou com dificuldades para criar um objeto qualquer que tenha uma lista como um de seus atributos usando a clausula NEW da JPQL. Para ilustrar melhor segue um exemplo simples:
//Entidade Usuário
public class Usuario implements Serializable {
private static final long serialVersionUID = 902608318899804872L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String login;
private String senha;
@ManyToMany
private List<Perfil> perfis;
}
//Entidade Perfil
public class Perfil implements Serializable{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String descricao;
}
//Meu objeto que eu quero criar usando a clausula NEW
public class UsuarioDTO {
private String login;
private String senha;
private List<Perfil> perfis;
public UsuarioDTO() {
}
public UsuarioDTO(String login, String senha, List<Perfil> perfis) {
this.login = login;
this.senha = senha;
this.perfis = perfis;
}
}
Aí eu tenho um repository que tem o método que cria o objeto
public interface UsuarioRepository extends JpaRepository<Usuario, Integer> {
@Query("select new br.com.demo.dtos.UsuarioDTO(u.login, u.senha, u.perfis) from Usuario u join fetch u.perfis")
List<UsuarioDTO> findAllUsuarioDTO();
}
Mas infelizmente que eu chamo o método usuarioRepository.findAllUsuario()
eu tenho o seguinte erro:
2018-06-05 12:49:29.457 ERROR 14692 --- [ restartedMain] o.h.hql.internal.ast.ErrorCounter : Unable to locate appropriate constructor on class [br.gov.ma.seap.joinfacesdemo.dtos.UsuarioDTO]. Expected arguments are: java.lang.String, java.lang.String, java.util.Collection
[cause=org.hibernate.PropertyNotFoundException: no appropriate constructor in class: br.gov.ma.seap.joinfacesdemo.dtos.UsuarioDTO]
2018-06-05 12:49:29.461 ERROR 14692 --- [ restartedMain] o.h.hql.internal.ast.ErrorCounter : Unable to locate appropriate constructor on class [br.gov.ma.seap.joinfacesdemo.dtos.UsuarioDTO]. Expected arguments are: java.lang.String, java.lang.String, java.util.Collection
[cause=org.hibernate.PropertyNotFoundException: no appropriate constructor in class: br.gov.ma.seap.joinfacesdemo.dtos.UsuarioDTO]
Desde já agradeço pela ajuda.