字段在JPA中的本机查询的值

时间:2010-08-30 10:11:50

标签: orm jpa field native

如何获取本机查询(JPA)中某些字段的值?

例如,我想获得客户表的名称和年龄:

Query q = em.createNativeQuery("SELECT name,age FROM customer WHERE id=...");

注意:我不想将结果映射到实体。我只想获得该领域的价值。

由于

2 个答案:

答案 0 :(得分:23)

具有多个选择表达式的本机查询返回Object[](或List<Object[]>)。从规范:

  

3.6.1查询接口

     

...

     

Java结果的元素   持久性查询其SELECT子句   由多个选择组成   表达式为Object[]类型。如果   SELECT子句只包含一个   选择表达式,元素   查询结果的类型为Object。什么时候   使用本机SQL查询,即SQL   结果集映射(参见章节   3.6.6),确定有多少项(实体,标量值等)   回。如果有多个项目   返回,查询的元素   结果是Object[]类型。如果只有一个   单项由于返回   SQL结果集映射或者如果是   结果类是指定的,   查询结果的元素是   输入Object

因此,要获得示例中的名称和年龄,您必须执行以下操作:

Query q = em.createNativeQuery("SELECT name,age FROM customer WHERE id = ?1");
q.setParameter(1, customerId);
Object[] result = (Object[])q.getSingleResult();
String name = result[0];
int age = result[1];

参考

  • JPA 1.0规范
    • 第3.6.1节“查询接口”
    • 第3.6.6节“SQL查询”

答案 1 :(得分:-1)

取决于JPA的实施。例如,Hibernate与castor不同。 这是一个如何在Hibernate中起作用的例子:

Query query = session.createSQLQuery(
"select s.stock_code from stock s where s.stock_code = :stockCode")
.setParameter("stockCode", "7277");
List result = query.list();

我认为不可能得到一个整数等平面值......但是这个值应该非常接近它。