hibernate
を使用するJavaのSpring MVC
Webアプリケーションがあります。 SQL join
を使用して複数のテーブルからデータを取得しようとしていますが、単一のクエリを使用していくつかの条件に基づいて行数をカウントしています。私が使用している現在のSQLは次の通りです:複数の結合でSQLクエリーを使用し、ハイバネートでカウントする方法
SELECT (s.school_id, u.first_name, u.last_name, u.username, u.email, p.plan_name, s.start_date, s.end_date,(SELECT COUNT(*) FROM c_school_user t WHERE t.user_type = 'TA' and t.school_id = s.school_id), (SELECT COUNT(*) FROM c_school_user t WHERE t.user_type = 'PA' and t.school_id = s.school_id), (SELECT COUNT(*) FROM c_school_user t WHERE t.user_type = 'ST' and t.school_id = s.school_id)) FROM c_school s inner join u_user u on s.user_created = u.user_id inner join c_plan p on s.current_plan = p.plan_Id where s.application_id = 1 and s.site_id = 1;
このクエリは私にとって望ましい結果を返します。私は次のようにhibernat使用して結果を得るために、私の方法でSQLクエリと同じクエリを使用しようとしています:私は参加せずにSQLクエリを使用している場合
public List<Object[]> getBuyersInformation(int applicationId, int siteId) throws HibernateException
{
Session session = getCurrentSession();
Query query = session.createSQLQuery("SELECT (s.school_id, u.first_name, u.last_name, u.username, u.email, p.plan_name, s.start_date, s.end_date, s.subscription_price, (SELECT COUNT(*) FROM c_school_user t WHERE t.user_type = 'TA' and t.school_id = s.school_id), (SELECT COUNT(*) FROM c_school_user t WHERE t.user_type = 'PA' and t.school_id = s.school_id), (SELECT COUNT(*) FROM c_school_user t WHERE t.user_type = 'ST' and t.school_id = s.school_id)) FROM c_school s inner join u_user u WHERE s.user_created = u.user_id inner join c_plan p WHERE s.current_plan = p.plan_Id where s.application_id = :applicationId and s.site_id = :siteId");
query.setParameter("applicationId", applicationId);
query.setParameter("siteId", siteId);
List<Object[]> results = query.list();
if(results != null && results.size() > 0)
{
return results;
}
return null;
}
が、私は正しい結果を得るが、時の電流をクエリを使用すると、次の例外が発生します。
org.hibernate.MappingException: No Dialect mapping for JDBC type: 1111
I user Postgresデータベース。目的の結果をオブジェクトのリストまたは多分カスタムクラスとして得ることができる方法はありますか?この単一のSQLを使用しようとしているのは、データベースに何千もの情報行が含まれている可能性があり、このクエリを分割するとデータベース呼び出しが多くなり、結果的にシステムが遅くなるからです。 hibernateを使用して複数の結合とカウントでSQLクエリを実行する方法はありますか?
を、ありがとう –