4

私は部分的な UI 開発者です。現在、Hibernate 開発に移行する必要があります。今日、UNION ALL を使用しようとしたときに HQL で問題が発生しました。HQL は次のとおりです。

SELECT COUNT(DISTINCT users.userId) AS totalSize FROM (SELECT DISTINCT 
d1.sponsor.id AS userId FROM Dating d1 WHERE d1.invitee.id = ? UNION ALL 
SELECT DISTINCT d2.invitee.id AS userId FROM Dating d2 WHERE d2.sponsor.id = ?) 
AS users 

次のようなエラーが表示されます。

org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: ( near line 1, column 55

そして、この HQL を生の SQL に変換しようとしました。

SELECT COUNT(DISTINCT users.userId) AS totalSize FROM (SELECT DISTINCT 
d1.sponsorId AS userId FROM mmy_dating d1 WHERE d1.inviteeId = 6 UNION 
ALL SELECT DISTINCT d2.inviteeId AS userId FROM mmy_dating d2 WHERE 
d2.sponsorId = 6) AS users;

通常は正しい結果が表示されるので、Hibernate が UNION ALL 構文をサポートしていないかどうかを考えていました。

前もって感謝します。

4

2 に答える 2

6

このhttps://hibernate.atlassian.net/browse/HHH-1050の機能リクエストがまだ開いています。Hibernate Union の代替案もご覧ください。

于 2013-08-18T06:14:12.023 に答える
0

私の場合、この状況を回避する状況を見つけました。ここでの唯一の規則は、同じ型を持つことです。この場合、リストを返すことに対応する文字列は、必要な数のテーブルを追加できます。

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;
}

少しでも貢献できれば幸いです。皆さんの幸運を祈ります...

于 2014-12-19T15:57:49.510 に答える