如何获取本机查询(JPA)中某些字段的值?
例如,我想获得客户表的名称和年龄:
Query q = em.createNativeQuery("SELECT name,age FROM customer WHERE id=...");
注意:我不想将结果映射到实体。我只想获得该领域的价值。
由于
答案 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];
答案 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();
我认为不可能得到一个整数等平面值......但是这个值应该非常接近它。