Weles
Weles

Reputation: 1275

Populate DTO with Native Query using JPA

I would like to populate a Data Transfer Object Class with the Result of a native query. But I was receiving the following error:

    nested exception is org.hibernate.MappingException: Unknown entity: br.com.cpb.gsa.dto.UserDTO

This is my DTO Class

package br.com.cpb.gsa.dto;

import java.io.Serializable;

public class UserDTO implements Serializable {

    private static final long serialVersionUID = 4406975982782060793L;

    private Integer id_Usuario;
    private String login;

    public UserDTO(Integer id_Usuario, String login) {
        this.id_Usuario = id_Usuario;
        this.login = login;
    }

    public Integer getId_Usuario() {
        return id_Usuario;
    }
    public void setId_Usuario(Integer id_Usuario) {
        this.id_Usuario = id_Usuario;
    }
    public String getLogin() {
        return login;
    }
    public void setLogin(String login) {
        this.login = login;
    }
}

this is my native query. it´s a simple query:

import br.com.cpb.gsa.dto.UserDTO;

@Repository
public class UserRepositoryImpl implements UserCustomRepository {

    @PersistenceContext
    private EntityManager em;

    @Override
    public UserDTO findById(Integer id) {


        String query =    " select  au.id_Usuario, "
                        + "         au.login"
                        + " from    Adm_Usuario au"
                        + " where   au.id_Usuario = 1"; 

        Query natQuery = em.createNativeQuery(query, UserDTO.class);
        UserDTO userDTO = (UserDTO) natQuery.getSingleResult();
        return userDTO;     
    }

}

I am using Spring Data JPA, but I know in hibernate exists a method setResultTransformer, but I can't find something like in JPA.

In my case, I need to use a native query because in other queries will use table value functions.

Upvotes: 0

Views: 1878

Answers (1)

Ilya Sereb
Ilya Sereb

Reputation: 2571

Projections are something that you are looking for.

Upvotes: 1

Related Questions