テーブルcasemessage
があり、次の列があります。 Spring Framework JPA
...Spring Boot JPA:テーブルのJSON列を照会する方法
- ID
- CREATED_BY
- を使用して、私は、検索しようとしています/クエリ
JSON
列 - created_utcは
- メッセージ
- 状態
- が
ここで、status
列にはJSON
文字列のリストが格納されます。例えば:私はuser_id
が1
とstatus
あるすべての行を取得するには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 JPA
(Spring 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注釈
と::
[チェックの可能性の重複値がmysqlのjsonエンコード配列に存在する場合](http://stackoverflow.com/questions/41132714/check-if-a-value-exists-in-json-encode-arra y-in-mysql) – e4c5
@ e4c5、私はJPAの観点から見ています。私のクエリは、違いが生じないMySQL – Keerthi
で動作します。これはJSONには適していない状況です – e4c5