Orm JPA中本机查询的字段值

Orm JPA中本机查询的字段值,orm,jpa,field,native,Orm,Jpa,Field,Native,如何在本机查询JPA中获取某些字段的值 例如,我想获取customer表的名称和年龄: Query q = em.createNativeQuery("SELECT name,age FROM customer WHERE id=..."); 注意:我不想将结果映射到实体。我只想得到字段的值 谢谢取决于JPA的实施。例如,Hibernate与castor的做法不同。 下面是一个在Hibernate中工作的示例: Query query = session.createSQLQuery( "se

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

例如,我想获取customer表的名称和年龄:

Query q = em.createNativeQuery("SELECT name,age FROM customer WHERE id=...");
注意:我不想将结果映射到实体。我只想得到字段的值


谢谢

取决于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();

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

带有多个select表达式的本机查询返回一个对象[]或列表。根据规范:

3.6.1查询接口

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

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

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];
工具书类 JPA1.0规范 第3.6.1节查询接口 第3.6.6节SQL查询
行内对象[]结果=q.getSingleResult;我有错误:必需对象[]找到对象!我通过强制转换来解决它:Object[]result=Object[]q.getSingleResult@Navid啊,是的,我的代码缺少强制转换,不是在IDE中编写的。有没有一种方法可以将上面的查询与类“Customer”{name,age,sex}映射,而不将对象强制转换到任何类?我的意思是结果集应该像JQL一样。