2017-05-11 12 views
0

テーブルcasemessageがあり、次の列があります。 Spring Framework JPA ...Spring Boot JPA:テーブルのJSON列を照会する方法

  1. ID
  2. CREATED_BY
  3. を使用して、私は、検索しようとしています/クエリJSON
  4. created_utcは
  5. メッセージ
  6. 状態
をCASE_ID from_id

ここで、status列にはJSON文字列のリストが格納されます。例えば:私はuser_id1statusあるすべての行を取得するにはcasemessageテーブルを照会しようとしています

1. [{"user_id": 1, "status": "sent"}, {"user_id": 2, "status": "delete"}] 
2. [{"user_id": 3, "status": "delete"}, {"user_id": 2, "status": "sent"},{"user_id": 1, "status": "received"}] 
3. [{"user_id": 1, "status": "received"}, {"user_id": 2, "status": "sent"}] 
4. [{"user_id": 1, "status": "delete"}, {"user_id": 3, "status": "sent"}] 

をしませdelete

MySQLクエリを使用している、私はテーブルを照会し、取り戻すことができています予想された結果。ここで

は、私が試したクエリ、次のとおりです。アプリケーションの実行時

select * from casemessage where case_Id=1 and id not in(select id from cwot.casemessage where json_contains(status, '{"status" :"delete"}') and json_contains(status, '{"user_id" : 1}')); 

を私はSpring Framework JPASpring Boot)を使用して、これを試したとき、私は例外を戻りました。

@Query("select c from CaseMessage c where c.caseId=?1 and c.id not in(select cm.id from CaseMessage cm where json_contains(status, '{\"status\": \"delete\"}') and json_contains(status, '{\"user_id\": ?2}'))") 
    List<CaseMessageResponse> getAllCaseMessages(long caseId, long userId); 

私は戻って取得していますエラー:

Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected AST node: (near line 1, column 172 [select c from com.cwot.domain.CaseMessage c where c.caseId=?1 and c.id not in(select cm.id from com.cwot.domain.CaseMessage cm where json_contains(status, '{"status": "delete"}') and json_contains(status, '{"user_id": ?1}'))] 

は、いくつかのいずれかが、これで私を助けることができますここで私は縛らという記述がありますか。?

本当にありがとうございます。

@Query("select c from CaseMessage c where c.caseId=?1 and c.id not in(select cm.id from CaseMessage cm where json_contains(status, '{\"status\": \"delete\"}') and json_contains(status, '{\"user_id\": ?2}'))", nativeQuery = true) 
    List<CaseMessageResponse> getAllCaseMessages(long caseId, long userId); 

以上の情報について@NativeQuery注釈

と::

+0

[チェックの可能性の重複値がmysqlのjsonエンコード配列に存在する場合](http://stackoverflow.com/questions/41132714/check-if-a-value-exists-in-json-encode-arra y-in-mysql) – e4c5

+0

@ e4c5、私はJPAの観点から見ています。私のクエリは、違いが生じないMySQL – Keerthi

+0

で動作します。これはJSONには適していない状況です – e4c5

答えて

2

あなたはjson_containsのようなデータベース機能を使用するネイティブクエリを使用する必要があります

Difference between query, native query, named query and typed query

+0

このステートメントを使用して実行したとき、 'org.springframework.dao.InvalidDataAccessApiUsageException:その位置[2]のパラメータは存在しませんでした。ネストされた例外はjava.lang.IllegalArgumentExceptionです:その位置[2]のパラメータは存在しませんでした ' – Keerthi

+0

あなたはクエリを変更する必要があります。 –

関連する問題