Jos*_*hua 5 java hibernate jpa
我是所有这些Hibernate/JPA的新手,所以我会尽量清楚.
在Hibernate中有没有办法使用createNativeQuery在查询中选择单个/或多个字段而不使用Entity类作为返回对象?
我试图这样做而不使用任何与XML相关的东西.
Query query = getEntityManager().createNativeQuery("select name from contact where id_contact = :idContact", String.class);
query.setParameter("idContact", 9293L);
Object string = query.getSingleResult();
System.out.println(string);
Run Code Online (Sandbox Code Playgroud)
使用这个我有例外: Exception in thread "main" javax.persistence.PersistenceException: org.hibernate.MappingException: Unknown entity: java.lang.String
谢谢
编辑:
我也尝试过:
Query query = getEntityManager().createNativeQuery("select name from contact where id_contact = :idContact");
query.setParameter("idContact", 9293L);
List list = query.getResultList();
if (!list.isEmpty()){
Object string = list.get(0);
System.out.println(string);
}
Run Code Online (Sandbox Code Playgroud)
具有相同的例外: Exception in thread "main" java.lang.ClassCastException: java.lang.String cannot be cast to [Ljava.lang.Object;
编辑(2):我开始认为它是Hibernate中的一个错误,或者不可能做这样的事情......
cyo*_*yon 13
问题是你String.class
作为第二个参数传递给createNativeQuery
.这将使hibernate尝试使用它String.class
来为结果集创建映射.它只能从实体类创建此映射,并且String
不是实体类,因为它未映射到表.
幸运的是,解决方案是简单地使用createNativeQuery
不需要第二个参数的重载版本.
String SQL = ".."; //same SQL as you had before
Query query = getEntityManager().createNativeQuery(SQL); //no entity mapping
query.setParameter("idContact", 9293L);
Object string = query.getSingleResult();
System.out.println(string);
Run Code Online (Sandbox Code Playgroud)
如果是Native查询或带有列名的jpql,则EntityManager返回一个对象数组的List.
所以要获得结果列表.
收到它
List<Object[]> listResults = query.getResultList();
Run Code Online (Sandbox Code Playgroud)
然后迭代它: -
for (Object[] record : listResults) {
//Iterate Logic will come here
}
Run Code Online (Sandbox Code Playgroud)
只是尝试调用createNativeQuery()
而不通过String.class
。如果name
数据库中的列是字符串类型,query.getSingleResult()
实际上会返回一个String
.
归档时间: |
|
查看次数: |
45088 次 |
最近记录: |