Hibernate从HQL生成无效的SQL查询

Hibernate从HQL生成无效的SQL查询,sql,oracle,hibernate,hql,Sql,Oracle,Hibernate,Hql,这是我需要Hibernate构建的SQL查询(在我的SQL客户机工具中执行,运行速度非常快): 从决策中选择decision.decisionid 内部联接继续进行决策。proceedingId=PROCENDING.proceedingId 内部联接IPRIGHT\u继续IPRIGHT on proceedingId=IPRIGHT.proceedingId 其中继续进行。档案编码=7,决定。创建日期>=截止日期('2017-04-22','YYYY-MM-DD'),决定。创建日期=截止日期(

这是我需要Hibernate构建的SQL查询(在我的SQL客户机工具中执行,运行速度非常快):

从决策中选择decision.decisionid
内部联接继续进行决策。proceedingId=PROCENDING.proceedingId
内部联接IPRIGHT\u继续IPRIGHT on proceedingId=IPRIGHT.proceedingId

其中继续进行。档案编码=7,决定。创建日期>=截止日期('2017-04-22','YYYY-MM-DD'),决定。创建日期=截止日期('2017-04-22','YYYY-MM-DD'),决定。更新日期=?和决策0_uu.creationdate=?首先,我认为您编写了JPQL代码,而不是HQL,但无论如何,您的查询都有很多问题。首先,查看您的
选择

select decision.decisionId
FROM Decision decision, Proceeding proceeding, IprightProceeding iprightproceeding
您正在这三个表之间进行交叉联接,因为实际上没有指定联接条件。您需要在JPQL的
WHERE
子句中限制联接。如果不这样做,它就是一个交叉连接

在此基础上,您将对相同的表进行一系列内部联接,从而对某些表进行第二次联接。尝试下面的JPQL查询,它可能并不完美,但应该更接近您想要运行的内容

select d.decisionId FROM Decision d, Proceeding p, IprightProceeding i
where d.proceeding = p and
      p.proceedingId = i and
      d.proceeding.dossierKind = ?1 and
      d.creationDate >= ?2 and
      d.creationDate <= ?3 or
      (d.updatedate >= ?2 AND d.updatedate <= ?3)
从决策d、程序p和程序i中选择d.decisionId
其中d.d=p和
p、 proceedingId=i和
d、 继续。档案索引=?1和
d、 creationDate>=?2和

d、 creationDate=?2和d.updatedate实际上是同一个表的3倍,这正是您告诉它对HQL所做的
    Hibernate: select decision0_.decisionid as col_0_0_ from DECISION decision0_ 
inner join PROCEEDING proceeding3_ on decision0_.proceedingid=proceeding3_.proceedingid 
cross join PROCEEDING proceeding1_ 
cross join IPRIGHT_PROCEEDING iprightpro2_ 
inner join PROCEEDING proceeding4_ on iprightpro2_.proceedingid=proceeding4_.proceedingid 
where proceeding3_.dossierkindcode=? and decision0_.creationdate>=? and decision0_.creationdate<=? or decision0_.updatedate>=? and decision0_.updatedate<=?
select decision.decisionId
FROM Decision decision, Proceeding proceeding, IprightProceeding iprightproceeding
select d.decisionId FROM Decision d, Proceeding p, IprightProceeding i
where d.proceeding = p and
      p.proceedingId = i and
      d.proceeding.dossierKind = ?1 and
      d.creationDate >= ?2 and
      d.creationDate <= ?3 or
      (d.updatedate >= ?2 AND d.updatedate <= ?3)