我在通过 JPA 使用 sql native 查询选择一些数据时遇到了一些麻烦。那是因为我有 3 个同名的列,“descricao”。
当我通过 EntityManager 接口(interface)的 createNativeQuery 方法执行选择操作时,找到的第一列值会覆盖其他列值。
(例如,给定记录的第一列descricao的值为“foo”,第二个“bar”和第三个“foobar”,当我在一个对象数组中得到这个结果时(因为我还没有ORM 映射了实体),任何地方都应该填充列 descicao 的给定第二个和第三个值填充第一个的值)
我很确定那是因为我曾经使用过 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")}
)
现在按照列映射中的指定为 native 查询中的列使用别名。
"选择 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 和查询创建 native 查询。
entityManager.createNativeQuery(queryString, "DescricaoColumnAlias");
关于java - 如何使用 JPA native 查询选择具有相同名称的多个列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6180214/