如何使用JPA本机查询选择多个具有相同名称的列?

| 在通过JPA使用sql本机查询选择某些数据时,遇到了一些麻烦。那是因为我有3个具有相同名称的列“ descricao”。 当我通过EntityManager接口的createNativeQuery方法执行select操作时,找到的第一列值将覆盖其他值。 (例如,当我在对象数组中得到此结果时,给定记录的第一列描述的值为\“ foo \”,第二个\“ bar \”和第三个\“ foobar \”(因为还没有ORM映射的实体),无论在何处都应使用给定列的第二和第三个值descricao填充第一个的值) 我非常确定,这是因为一旦在数据库上直接选择了JPA,就可以正确返回所有内容。 环境: MySQL5; EJB 3.0; JPA 1.0; JBoss 5.0.0GA; JDK 1.6; SQL查询:
\"select p.id, p.datapedido, b.descricao, prd.descricao, s.nome,
            usuario.email, cc.chave_cupom, prd.nome,
             ca.descricao, i.produto_id, i.valoritem,
             hc.valor_utilizado, tp.datapagamento
            ...\"
    
已邀请:
        实体Bean中的标量列映射:
@SqlResultSetMapping(
      name=\"DescricaoColumnAlias\",
      columns={@ColumnResult(name=\"B_DESCRICAO\"),
               @ColumnResult(name=\"CA_DESCRICAO\"),
               @ColumnResult(name=\"PRD_DESCRICAO\")}
)
现在,按照列映射中的指定,对本机查询中的列使用别名。 \“选择p.id,p.datapedido,b.descricao作为B_DESCRICAO,prd.descricao作为PRD_DESCRICAO,s.nome,usuario.email,cc.chave_cupom,prd.nome,ca.descricao作为CA_DESCRICAO,i.produto_id,i .valoritem,hc.valor_utilizado,tp.datapagamento ... \“ 通过指定resultSetMapping和query创建本机查询。
entityManager.createNativeQuery(queryString, \"DescricaoColumnAlias\");
    
        我认为您应该使用SqlResultSetMapping指定列如何映射到实体的属性。 您可能会发现Eclipselink项目的这个Wiki页面(JPA参考实现)很有用:http://en.wikibooks.org/wiki/Java_Persistence/Querying#Result_Set_Mapping     
        我不使用JPA,因此如果超出范围则忽略它,但是如果未映射实体,那么为什么不能在查询中为受影响的字段添加别名并相应地访问结果集?
select b.descricao AS d1, prd.descricao as d2, ca.descricao as d3...
    
        
@Transactional(readOnly = true)
@SuppressWarnings(\"unchecked\")
@Column(name = \"status\")

public List<Student> findStudentByStatus(String status) {
    System.out
            .println(\"call findStudentMethd******************with this pattern\"
                    + status
                    + \"*********************************************\");

    return em.createQuery(
            \"select attendence from Attendence attendence where attendence.status like \'\"
                    + p
                    + A 
                    + L 
                    + \"\'\")

    .getResultList();

}
    

要回复问题请先登录注册