Java JPA-在同一个表上连接

Java JPA-在同一个表上连接,java,hibernate,jpa,Java,Hibernate,Jpa,我收到了这个请求: TypedQuery<ParamGenerauxExternes> q = entityMgr .createQuery("SELECT p FROM ParamGenerauxExternes p " + "WHERE EXISTS " + "(SELECT q FROM ParamGenerauxExternes q "

我收到了这个请求:

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%");
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

我不知道为什么hibernate在第二个
select
之后添加一个括号?如果您知道该怎么做,请告诉我…

该查询在Oracle上失败,但会继续,例如,Postgres。如果您使用的是Oracle数据库,请尝试将Oracle SQL方言设置为您的JPA提供程序。

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