简体   繁体   English

JPA-加入同一张桌子

[英]JPA - Join on same table

I got this request : 我收到了这个请求:

TypedQuery<ParamGenerauxExternes> q = entityMgr
            .createQuery("SELECT p FROM ParamGenerauxExternes p "
                    + "WHERE EXISTS "
                    + "(SELECT q FROM ParamGenerauxExternes q "
                    + "WHERE q.key.origine = :pOrigine "
                    + "AND q.key.typeParam LIKE :pTypeParametreBis "
                    + "AND p.key.sousType LIKE CONCAT('%',q.libelleParam) "
                    + "AND q.actif = 'Y') "
                    + "ORDER BY p.libelleParam", ParamGenerauxExternes.class)
            //.setParameter("pTypeParametre", "REL_TO_HOUSEHOLD")
            .setParameter("pOrigine", pOrigineGrc)
            .setParameter("pTypeParametreBis", "GRC_HOUSEHOLD_TYPE_P%");

But it doesn't work, I got this error message that tell a prenthesis is missing : 但这不起作用,我得到了一条错误消息,告诉我们缺少一个假牙:

GRAVE: EJB Exception: : javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: ORA-00907: missing right parenthesis

The generated SQL by JPA has a parenthesis after the second select : 在第二次选择之后,JPA生成的SQL带有括号:

select
    paramgener0_.CODE_PARAM as CODE1_2823_,
    paramgener0_.ORIGINE as ORIGINE2823_,
    paramgener0_.SOUS_TYPE as SOUS3_2823_,
    paramgener0_.TYPE_PARAM as TYPE4_2823_,
    paramgener0_.ACTIF as ACTIF2823_,
    paramgener0_.LIBELLE_PARAM as LIBELLE6_2823_ 
from
    FOA_PARAM_GEN_EXTERNE paramgener0_ 
where
    exists (
        select
            (paramgener1_.CODE_PARAM,
            paramgener1_.ORIGINE,
            paramgener1_.SOUS_TYPE,
            paramgener1_.TYPE_PARAM) 
        from
            FOA_PARAM_GEN_EXTERNE paramgener1_ 
        where
            paramgener1_.ORIGINE=? 
            and (
                paramgener1_.TYPE_PARAM like ?
            ) 
            and (
                paramgener0_.SOUS_TYPE like '%'||paramgener1_.LIBELLE_PARAM
            ) 
            and paramgener1_.ACTIF='Y'
    ) 
order by
    paramgener0_.LIBELLE_PARAM

I don't know why hibernate add a parenthesis after the second select ? 我不知道为什么冬眠第二select后添加括号? Please if you know what to do... 如果您知道该怎么办,请...

That query fails on Oracle but passes on, for example, Postgres. 该查询在Oracle上失败,但会继续传递,例如Postgres。 If you are using Oracle database, try setting Oracle SQL dialect to your JPA provider. 如果使用的是Oracle数据库,请尝试将Oracle SQL方言设置为JPA提供程序。
Hibernate SQL Dialects 休眠SQL方言

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM