[英]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.