2016-03-28 31 views
2

如何通过使用JPA本机查询获取单个对象。我做了一些研究,但所有答案都是使用“getSingleResult”,但是它没有返回我想要的结果。例如,如果我想要在我的数据库中获取表的计数并将其提取到整数中,我应该怎么做。JPA本机查询获取单个对象

下面这段代码演示了如何通过使用Sessison冬眠得到这样的:

int check = Integer.parseInt((String) sessionF.createSQLQuery("select to_char(count(*)) as count from user_tables where table_name upper('TEST')").uniqueResult()); 

什么,我希望能在精JPA:

int check = Integer.parseInt((String) getEntityManager().createNativeQuery("select to_char(count(*)) as count from user_tables where table_name upper('TEST')").getSingleResult()); 

显然,代码不会返回什么我想要。因此,请帮助我解决这个问题。谢谢 !

+0

这似乎是一个查询,您可以使用JPQL ... –

回答

2

随着JPA你需要做以下一样

int num = ((Number)this.entityManager.createNativeQuery("select count(*) from your_table_name") 
       .getSingleResult()).intValue(); 

编辑:

String name = this.entityManager.createNativeQuery("select t.name from your_table_name t limit 1").getSingleResult().toString(); 

,你会得到与NUM对象

希望它会帮助你算。

+0

嗨,谢谢你的回复。这会返回正确的结果。但是我希望能够获得我从数据库中查询的对象的价值。我应该怎么做,如果我想获得像这样的对象:“select table_test where id = 1”。 – minh

+0

请看我编辑的答案,希望你能明白你的观点。 –

+0

你需要像我编辑的答案 * String name = this.entityManager.createNativeQuery(“select your name from your_table_name t limit 1”)。getSingleResult()。toString(); * –

1

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

您可以根据您的要求使用下面的示例代码。

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

您可能需要对结果Array进行类型转换。