【发布时间】:2012-10-09 12:22:32
【问题描述】:
我在原生查询中遇到了一件奇怪的事情:
如果我尝试使用如下命名的本机查询
@NamedNativeQuery(name = "native_count_avg_guest_quizzes", resultClass = java.math.BigDecimal.class, query = "select avg(c) as r from ((select count(*) as c from user_quiz uq join user u on (uq.user_id = u.id) where u.status = 'temporary' group by u.id) as res)")
应用程序无法运行,我有
org.hibernate.HibernateException: Errors in named queries: native_count_avg_guest_quizzes_
但是,如果我不使用 NamedNativeQuery 而只是创建如下动态本机查询,则相同的查询可以正常工作:
entityManager.createNativeQuery(
"select avg(c) as r from ((select count(*) as c from user_quiz uq join user u on (uq.user_id = u.id) where u.status = 'temporary' group by u.id) as res)")
.getSingleResult()
为什么?我对 NamedNativeQuery 做错了什么?谢谢
更新: 实体类如下
@Entity
@Table(name = "user_quiz")
@NamedNativeQueries({
@NamedNativeQuery(name = "native_count_avg_guest_quizzes", resultClass = java.math.BigDecimal.class, query = "select avg(c) as r from ((select count(*) as c from user_quiz uq join user u on (uq.user_id = u.id) where u.status = 'temporary' group by u.id) as res)")
})
@NamedQueries({
@NamedQuery(name = "list_clients_quizzes", query = "select uq from UserQuiz uq where uq.quiz.client.id = :clientId"),
.......
})
public class UserQuiz extends Measurable {
.......
}
【问题讨论】:
-
您是否将带有查询的类标记为@Entity 或@MappedSuperclass?
-
@user2800708 我做到了。问题是该课程有很多 hql 查询,这些查询没有任何问题。该问题仅发生在此本机查询中。为了以防万一,我已经用实体类定义更新了这个问题。这个想法是:如果它是动态创建的,那么完全相同的原生查询就可以正常工作。我认为问题不在于实体定义。我认为问题在于 NamedNativeQueries 的处理方式
标签: jpa nativequery