2016-06-22 8 views
1

数日間の研究の後、まだ解決策が見つかりませんでした。LEFTジョインでHQLエラーが発生しました。

私はquerySyntaxExceptionを投げるこのHQL要求を持っている:

Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: with-clause referenced two different from-clause elements [SELECT patDataset.patient.sId , patData ,proDataset.professional.sId, proData FROM com.inovelan.cloud.persistence.server.entities.DataSet patDataset INNER JOIN patDataset.patient patient with patient. sId in (:patientSidList) LEFT JOIN patient.patientProfessionals ppRole with ppRole.id.roleCodingOidcodesystem= :codeSystem AND ppRole.id.roleCodingCode=:codingCode LEFT JOIN ppRole.professional proRole LEFT JOIN proRole.dataSet proDataset with proDataset.archive =:archive LEFT JOIN proDataset.dataProfessionals proData with proData.itemDefinition.id.id in (:proItemDefs) INNER JOIN patDataset.dataSetDefinition patDatasetDef with patDatasetDef.id.id in(:patDatasetDefIdList) INNER JOIN patDataset.dataPatients patData LEFT JOIN patDataset.dataPatients data_patient_PAT_SEXE with (data_patient_PAT_SEXE.itemDefinition.id.id=:data_patient_PAT_SEXE AND patDataset.dataSetDefinition.id.id ='DIRECTORY_PATIENT') LEFT JOIN patDataset.dataPatients data_patient_PAT_NOM_NAISSANCE with (data_patient_PAT_NOM_NAISSANCE.itemDefinition.id.id=:data_patient_PAT_NOM_NAISSANCE AND patDataset.dataSetDefinition.id.id ='DIRECTORY_PATIENT') LEFT JOIN patDataset.dataPatients data_patient_PAT_PRENOM with (data_patient_PAT_PRENOM.itemDefinition.id.id=:data_patient_PAT_PRENOM AND patDataset.dataSetDefinition.id.id ='DIRECTORY_PATIENT') WHERE patDataset.archive=:archive AND patient.active=:patientState AND (patDatasetDef.id.id =:dataset_def_pat_DIRECTORY_PATIENT AND patData.itemDefinition.id.id in (:itemdef_list_pat_DIRECTORY_PATIENT) ) AND patDataset.date = (SELECT MAX(patDataset2.date) FROM com.inovelan.cloud.persistence.server.entities.DataSet patDataset2 WHERE patDataset2.dataSetDefinition.id.id = patDataset.dataSetDefinition.id.id AND patDataset2.patient.sId = patDataset.patient.sId) ORDER BY (CASE WHEN data_patient_PAT_SEXE.stringValue IS NULL then 1 ELSE 0 END), data_patient_PAT_SEXE.stringValue ASC,(CASE WHEN data_patient_PAT_NOM_NAISSANCE.stringValue IS NULL then 1 ELSE 0 END), data_patient_PAT_NOM_NAISSANCE.stringValue ASC,(CASE WHEN data_patient_PAT_PRENOM.stringValue IS NULL then 1 ELSE 0 END), data_patient_PAT_PRENOM.stringValue ASC] 
at org.hibernate.hql.internal.ast.QuerySyntaxException.convert(QuerySyntaxException.java:91) 
at org.hibernate.hql.internal.ast.ErrorCounter.throwQueryException(ErrorCounter.java:109) 
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:284) 
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:206) 
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:158) 
at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:131) 
at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:93) 
at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:167) 
at org.hibernate.internal.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:301) 
at org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:236) 
at org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:1836) 
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:342) 

私はそれをより理解しやすくするために要求を抽出し、その理由は、「左の参加は、」メタデータをソートすることである(それは常に要求に追加していません):

SELECT patDataset.patient.sId, 
    patData 
FROM DataSet patDataset 
INNER JOIN patDataset.patient patient 
INNER JOIN patDataset.dataSetDefinition patDatasetDef WITH patDatasetDef.id.id IN(:patDatasetDefIdList) 
LEFT JOIN patDataset.dataPatients data_patient_PAT_SEXE WITH (data_patient_PAT_SEXE.itemDefinition.id.id='SEXE' 
                  AND patDatasetDef.id.id ='DIRECTORY_PATIENT') 
WHERE patDataset.archive=:archive 
AND patient.active=:patientState 
ORDER BY (CASE 
      WHEN data_patient_PAT_SEXE.stringValue IS NULL THEN 1 
      ELSE 0 
     END), data_patient_PAT_SEXE.stringValue ASC 

私はすでにSQLにしようと、私は完全に

LEFT OUTER JOIN dataPatient datapatien1 ON dataset.sId=datapatien1.dataSetSid 
AND (datapatien1.itemDefinitionId ='SEXE') 
AND datasetdef.id ='DIRECTORY_PATIENT' 
作品をやりたいです

は私が休止状態https://hibernate.atlassian.net/browse/HHH-7321 でこの問題について聞いたが、私は、Hibernate 5.2で動作し、私はすでに同様の質問をチェックしました

[OK]をする必要があり、誰が同じ場合にのため

感謝を持っていませんあなたの助け

答えて

0

"patDatasetDef.id.id"ステートメントのためにHQLがこのエラーを生成します。この文を解析する際に問題が発生します。

代わりに、あなたは以下のように参加したオブジェクトに対して操作を結合を使用する必要があります。 offspr、母親を選択し、母親 インナーがメイト としてmother.mateに参加するようDomesticCatのから をmate.nameは、外側を offsprとしてmother.kittensを左結合します

使用参照: For reference use this link

関連する問題