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)
实体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)
| 归档时间: |
|
| 查看次数: |
9488 次 |
| 最近记录: |