JPA本机查询返回类

在JPA中,我定义了一个将返回String的本机sql,

@NamedNativeQuery(name = "alert", query = " select distinct c.accountId from account c ", resultClass = String.class) 

错误消息是

 org.hibernate.MappingException: Unknown entity: java.lang.String 

有什么线索吗? 谢谢

 @SqlResultSetMappings({ @SqlResultSetMapping(name = "alertMapping", columns = { @ColumnResult(name = "accountId")}) }) @NamedNativeQuery(name = "alert", query = " select distinct c.accountId from account c ", resultSetMapping = "alertMapping") 

用法:

 EntityManager em = ...... / injected / etc TypedQuery query = em.createNamedQuery("alert", String.class); List accountIds = query.getResultList(); 

(未经检查的语法,但我希望基本的想法来)

对于NamedNativeQueries,只有在结果实际映射到实体时才能使用resultClass。 也可以不指定结果映射,在这种情况下,您将获得一个List of Object []。 列表的每个元素都是一条记录,您必须将每个Object显式地转换为您想要的类型。 嗯,最后一部分可能只适用于NativeQueries而不是Named – 暂时不确定。

似乎Hibernate只允许实体结果类。 显然,并非所有JPA实现都有此限制。 例如, DataNucleus JPA允许该查询正常运行。

在我的例子中,我将hibernate版本从3.5.6更改为4.3.3。 它工作正常。

   org.hibernate hibernate-core 4.3.3.Final   org.hibernate hibernate-core 4.3.3.Final   org.hibernate hibernate-entitymanager 4.3.3.Final  

不要在查询声明中包含resultClass