2017-05-27 9 views
0

以下のパラメータ:idequipementおよびidMissionを使用して、応答されておらず、応答されていない(応答チェックリストはResponsesCheckListsテーブルにあります)すべてのチェックリストを表示します。JPA、JPQL:予期しないトークン:LEFTの近く1行

antlr.NoViableAltException: unexpected token: LEFT 
------ 
Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: LEFT near line 1, column 148 [SELECT check,resp,eq FROM com.SSC.DAO.Entities.Equipements eq INNER JOIN CheckLists check WHERE eq.idEquipements = check.equipements.idEquipements LEFT JOIN ResponsesCheckLists resp ON check.idCheckLists=resp.CheckLts.idCheckLists AND resp.Respmission.idMission = :idmiss WHERE eq.idEquipements = :idEqp ] 
------ 
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'responsesCheckListsRepository': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Validation failed for query for method public abstract java.util.List com.SSC.DAO.JPARepository.ResponsesCheckListsRepository.ListCheckListsNonRepondu(long,long)! 

EDIT1:

@Query("SELECT check,resp,eq FROM Equipements eq INNER JOIN CheckLists check WHERE eq.idEquipements = check.equipements.idEquipements LEFT JOIN ResponsesCheckLists resp ON check.idCheckLists=resp.CheckLts.idCheckLists AND resp.Respmission.idMission = :idmiss WHERE eq.idEquipements = :idEqp ") 
    public List<ResponsesCheckLists> ListCheckListsNonRepondu(@Param("idEqp") long idEqp, @Param("idmiss") long idmiss); 

、Iこのエラーメッセージが表示され、このクエリを実行した後EDIT1の

@Query("SELECT check,resp,eq FROM Equipements eq INNER JOIN CheckLists check ON eq.idEquipements = check.equipements.idEquipements" 
      + " INNER JOIN ResponsesCheckLists resp ON check.idCheckLists=resp.CheckLts.idCheckLists AND resp.Respmission.idMission = :idmiss AND eq.idEquipements = :idEqp ") 
    public List<ResponsesCheckLists> ListCheckListsNonRepondu(@Param("idEqp") long idEqp, @Param("idmiss") long idmiss); 

エラー。

に起因:java.lang.IllegalStateException:ノードのデータはありませんタイプ: org.hibernate.hql.internal.ast.tree.IdentNode + - [IDENT] IdentNode: '確認' {originalText =チェック}

antlr.SemanticException:パスが参加予定です! java.lang.IllegalArgumentExceptionが:によって引き起こさ

検証は、メソッドpublic抽象java.util.Listに com.SSC.DAO.JPARepository.ResponsesCheckListsRepository.ListCheckListsNonRepondu(長い、長い)ため クエリに失敗しました!

EDIT2:EDIT2の

@Query("SELECT check , resp , eq FROM Equipements eq INNER JOIN CheckLists check ON eq.idEquipements = check.equipements.idEquipements" 
      + " INNER JOIN ResponsesCheckLists resp ON check.idCheckLists=resp.CheckLts.idCheckLists AND resp.Respmission.idMission = :idmiss AND eq.idEquipements = :idEqp ") 
    public List<ResponsesCheckLists> ListCheckListsNonRepondu(@Param("idEqp") long idEqp, @Param("idmiss") long idmiss); 

エラー:java.lang.IllegalStateException:によって引き起こさ

ノードのデータはありませんタイプ: org.hibernate.hql .internal.ast.tree.IdentNode + - [IDENT] IdentNode: 'check' {originalText = check} antlr.SemanticExceptイオン:参加予定のパス!

このクエリを修正するにはどうすればよいですか?

あなたはJPQLクエリを指定しますが春の注釈(@Query)を持って事前に

+0

ネイティブクエリまたはJPQLクエリを実行しようとしていますか? –

+0

したいですかJPQLのクエリ – Michael1

+1

WHERE句にLEFT JOINは許可されていません。 – ujulu

答えて

1

をお願いします。 JPQLクエリは、構文highlighted in this link(およびJPA仕様)に従うものとします。残念ながらあなたはそれに従っていません。

SELECT {result} FROM {from} WHERE {where} ... 

"JOIN"はFROM句に入れる必要があります。あなたはすでにFROM句にJOINを1つ入れていますが、あなただけが知っている理由から、別のJOINをWHERE句に入れることにしました!!実際には、あなたは2つのWHERE句をそのくそで持っています。

あなたのエンティティを投稿していないので、あなたのクエリがどんな関係になっているのか、あるいはあなたが達成しようとしているものさえわからないので、あなたの質問が何であるべきかを伝えることは不可能です。あなたのエラーだけを指摘することができます

+0

私はリンクに従って要求を修正しようとしました。しかし私は別のタイプのエラーがあります。私は投稿を更新しました。 @Neil Stockton – Michael1

+0

リンクによれば、JOINはRELATIONに沿っていなければなりません(JPQLは擬似オブジェクト指向のクエリ言語なので)。上で述べたように、あなたが持っているエンティティ/フィールドを投稿しないので、関係がある場所のみを知ることができます –

+0

JPQLで3つのテーブルを結合するという問題があります。私は彼らに良い結合する方法を知らない@ニールストックトン – Michael1

関連する問題