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

Jay*_*tta 7 java mysql jpa jdbc

我通过JPA使用sql本机查询选择一些数据时遇到了一些麻烦.那是因为我有3个同名的列,"descricao".

当我通过EntityManager接口的createNativeQuery方法执行select操作时,找到的第一个列值会覆盖其他列值.

(例如,给定记录的第一列descricao的值是"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
            ..."
Run Code Online (Sandbox Code Playgroud)

Nay*_*kar 5

实体Bean中的标量列映射:

@SqlResultSetMapping(
      name="DescricaoColumnAlias",
      columns={@ColumnResult(name="B_DESCRICAO"),
               @ColumnResult(name="CA_DESCRICAO"),
               @ColumnResult(name="PRD_DESCRICAO")}
)
Run Code Online (Sandbox Code Playgroud)

现在使用列映射中指定的本机查询中的列的别名.

"选择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");
Run Code Online (Sandbox Code Playgroud)