Tomcat 7.0.35 (Spring 3.1、Hibernate 3.6.1、JPA 2.0) で Spring + Hibernate Web アプリケーションを実行しています。
このアプリには、Hibernate の基準を介してデータベースからデータを取得するページがあります (そうする必要がないことはわかっています)。サービス層は単にデータ層を呼び出します。コードは次のとおりです。
Criteria criteria = sessionFactory.openSession().createCriteria(Article.class);
criteria.addOrder(Order.desc("updatedTime"));
criteria.add(Restrictions.eq("account", acc));
criteria.add(Restrictions.eq("draft", true));
criteria.setMaxResults(1);
Article s = (Article) criteria.uniqueResult();
return s;
Tomcat はこのページからいくつかのリクエストしか処理できず、応答しなくなります。ブラウザがサーバーの応答を待ち続けていることがわかります (Firefox のステータス バーに「ホストを待機中」と表示されます)。
OutOfMemory などのエラー メッセージは表示されません。ブラウザが永遠に待機しているようです。
次のようにJPAに変更すると:
@NamedQuery(name = "Article.getMostRecentDraftArticle", query = "select x from Article x where x.account = :account and x.draft = 1 order by x.updatedTime desc"),
.....
Query q = getSession().getNamedQuery("Article.getMostRecentDraftArticle");
q.setParameter("account", acc);
q.setMaxResults(1);
List list = q.list();
if (list.size() == 0)
return null;
else
return (Article) list.get(0);
その後、すべてが正しく機能します。
Hibernate の Criteria API を使用すると、何が問題になる可能性がありますか?
ご意見ありがとうございます。
乾杯。