1. ホーム
  2. java

HQLクエリでHibernateテーブルがマッピングされていないエラーが発生する

2023-07-11 06:49:06

質問

Hibernateを使用してデータベース上でCRUD操作を行うWebアプリケーションを持っています。テーブルがマッピングされていないというエラーが発生しました。Javaファイルを参照してください。

エラーメッセージです。

org.springframework.orm.hibernate3.HibernateQueryException: Books is not mapped [SELECT COUNT(*) FROM Books]; nested exception is org.hibernate.hql.ast.QuerySyntaxException: Books is not mapped [SELECT COUNT(*) FROM Books]
at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:660)
at org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:412)
at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:411)
...
Caused by: org.hibernate.hql.ast.QuerySyntaxException: Books is not mapped [SELECT COUNT(*) FROM Books]
at org.hibernate.hql.ast.util.SessionFactoryHelper.requireClassPersister(SessionFactoryHelper.java:181)
at org.hibernate.hql.ast.tree.FromElementFactory.addFromElement(FromElementFactory.java:111)
at org.hibernate.hql.ast.tree.FromClause.addFromElement(FromClause.java:93)
...

ここで、私の DAO.java メソッドです。

public int getTotalBooks(){
    return DataAccessUtils.intResult(hibernateTemplate.find(
          "SELECT COUNT(*) FROM Books"));
}

Book.java :

@Entity
@Table(name="Books")
public class Book {

    @Id
    @GeneratedValue
    @Column(name="id")
    private int id;

    @Column(name="title", nullable=false)
    private String title;
    ...
}

どのように修正すれば動作するのでしょうか?

どのように解決するのですか?

例外メッセージが表示されます。

Books is not mapped [SELECT COUNT(*) FROM Books]; nested exception is org.hibernate.hql.ast.QuerySyntaxException: Books is not mapped [SELECT COUNT(*) FROM Books]

Books はマッピングされていません。というマッピングされた型がないことです。 Books .

そして実際、そうではありません。あなたのマッピングされた型は Book . というテーブルにマップされています。 Books というテーブルにマップされていますが、型は Book . HQL(またはJPQL)クエリを書くときは、テーブルではなく型の名前を使用します。

そこで、クエリを次のように変更します。

select count(*) from Book

が必要かもしれませんが

<ブロッククオート

select count(b) from Book b

HQL が * という表記になります。