15

HQL(Hibernate Query Language)を使用して、2つのテーブル間にユニオンを作成しようとしています。このSQLスクリプトは、私のSQLサーバーで正常に機能します。

SELECT COUNT(DISTINCT linkedin_id) as test, school_name
FROM
(SELECT * FROM alum_education 
 UNION
 SELECT * FROM alum_connection_educations) AS UNIONS where school_name='some string'

問題は、私がこのようなグレイルでそれを実行しようとすると、次のようになります。

     def countOfEdu = AlumEducation.executeQuery("select count (distinct linkedinId ) as countOfEdu, schoolName as SchoolName from (SELECT * FROM alumEducation UNION SELECT * FROM alumConnectionEducations) AS UNIONS where schoolName='some string'" )

このエラーが発生します:

  org.hibernate.hql.ast.QuerySyntaxException: unexpected token: ( near line 1, column 83 [select count(distinct linkedinId )  as countOfEdu, schoolName as SchoolName  from (SELECT * FROM alumEducation UNION SELECT * FROM alumConnectionEducations) AS UNIONS where schoolName='Duquesne University']

上記のSQLステートメントをgrailsで実行するにはどうすればよいですか?

ありがとうジェイソン

4

3 に答える 3

40

ユニオンはHQLではサポートされていません。2005年からオープンしているHibernateのJIRAに問題があります。

于 2011-08-24T21:30:11.177 に答える
1

この状況を回避するために私が見つけた方法を共有したいと思います。ここでの唯一のルールは、同じ型、この場合は戻りリストの型に対応する文字列を持つことです。必要な数のテーブルを追加できます。

public List<String> findByCPForCNPJ(String query){
TypedQuery<String> ccpf = manager.createQuery("select cpf from PessoaFisica where cpf like :pCpf", String.class);
ccpf.setParameter("pCpf", "%" + query + "%");
List<String> lista1 = ccpf.getResultList();

TypedQuery<String> ccnpj = manager.createQuery("select cnpj from PessoaJuridica where cnpj like :pCnpj", String.class);
ccnpj.setParameter("pCnpj", "%" + query + "%");

lista1.addAll(ccnpj.getResultList());
return lista1;
}

このソリューションでは、JAVAのメソッドを使用しました。私は少し、すべての人に幸運をもたらしたことを願っています...

于 2014-12-19T16:09:05.077 に答える
0

あなたの場合、本当の問題は、サブクエリがEJBQLのFROM句でサポートされていないことです。

于 2014-10-28T19:04:53.930 に答える