【问题标题】:Populate DTO with Native Query using JPA使用 JPA 使用本机查询填充 DTO
【发布时间】:2019-10-10 17:56:00
【问题描述】:

我想用原生查询的结果填充数据传输对象类。但我收到以下错误:

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

这是我的 DTO 课程

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;
    }
}

这是我的原生查询。这是一个简单的查询:

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;     
    }

}

我正在使用 Spring Data JPA,但我知道在 hibernate 中存在一个方法 setResultTransformer,但我在 JPA 中找不到类似的东西。

就我而言,我需要使用本机查询,因为在其他查询中将使用表值函数。

【问题讨论】:

    标签: java sql-server jpa spring-data-jpa


    【解决方案1】:

    Projections 是您正在寻找的东西。

    【讨论】:

    • 谢谢艾伦!我认为这是 JPA 中的唯一方法。实际上hibernate给了我们一个更好或者更简单的方法,用setResultTransformer。
    猜你喜欢
    • 1970-01-01
    • 2020-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多