2

ネイティブクエリで奇妙なことに直面しました:

次のような名前付きネイティブ クエリを使用しようとしている場合

@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 {
.......
}
4

2 に答える 2

4

createNativeQueryDBがそのクエリを理解して実行できることを意味するネイティブSQLクエリ言語に使用されます(例:)select * from some_table where id = '0001'

DB依存の原因となる場合があります。今、あなたはJPQL言語を使用しています。そのため、createQuery()または注釈createNameQuery()付きで@NameQuery歌います。

例 :

@NameQuery

@NamedQuery(name = "findAllEmployee", query = "select e from Employee e")
@Entity
public class Employee {
    @Id int id;
    String name;
    // ...
}

Query query = em.createNamedQuery("findAllEmployee");
query.getResultList()

動的

    Query query = em.createQuery("select e from Employee e");
    query.getResultList()?

*ネイティブ

Query query = em.createNativeQuery("SELECT * FROM EMPLOYEE_TBL");
query.getResultList()?
于 2012-10-19T06:52:47.867 に答える
0

@NamedNativeQuery から resultClass を削除します。

https://stackoverflow.com/a/9763489を参照してください

NamedNativeQueries では、結果が実際にエンティティにマップされる場合にのみ、resultClass を使用できます。

于 2016-11-08T02:56:20.733 に答える