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

标签 java mysql jpa jdbc

我在通过 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/

相关文章:

java - 如何从下拉列表循环中选择所有列表选项并选择每个选项

Java - UDP 和组播检测

java - 看起来 "imperative"支持响应式(Reactive)代码的代码是否常见?

php - 使用 PHP 和 HTML 单击链接将数据更新到 mysql 数据库

Spring Autowiring 失败,@Transactional

java - Spring data JPA - 从一个实体参数中排除 ID 列

java - 如何从Hibernate的结果集中获取List<Map<String,Object>>?

Java:如何扫描 map ?

php - 无法通过ajax从mysql查询读取json元素

MySQL - 带条件的 INSERT 命令