[英]Is there a JPA / JPQL query to search for a subset of entities passed as JSON in spring?
我在 spring 中定義了兩個實體,我想查詢包含給定標簽列表作為子集的帖子。
我的兩個實體看起來像
public class Post {
private @Id Integer id;
private @Column String text;
private @OneToMany List<Tag> tags;
}
和
public class Tag {
private @Id Integer id;
private @Column String key;
private @Column String value;
private @ManyToOne Post post;
}
我嘗試實現一個查詢來搜索包含一組標簽的帖子,例如
@Query("SELECT pst FROM Post pst JOIN pst.tags tgs WHERE :tags MEMBER OF pst.tags")
List<Post> findByTags(@Param("tags") Tag[] tags);
並稱之為 URL/tags/search/findByTags?tags=[{"key":"test","value":"test"}]
我的第一個問題是我無法讓它接受標簽內容而不是標簽 ID,所以我試圖像這個查詢一樣解決它
@Query("SELECT post FROM Post pst JOIN post.tags WHERE (SELECT tg from Tag tg WHERE tg.key = :key AND tg.value = :value) MEMBER OF post.tag")
List<Post> findByTags(@Param("key") String key, @Param("value") String value);
並稱其為 URL/tags/search/findByTags?key=test&value=test 這讓我遇到了以下錯誤
標量子查詢包含多於一行
有沒有辦法解決這兩個要求? 能夠通過具有任何值的鍵找到包含標簽的所有帖子將是一個獎勵。
編輯以澄清:
想象一下,我有兩個帖子,我將把它們繪制為 JSON,包括標簽的關系。
[
{
id: 1,
text: "text1",
tags: [
{
id: 1,
key: "key1",
value: "value1",
},
{
id: 2,
key: "key2",
value: "value2",
},
{
id: 3,
key: "key3",
value: "value3",
},
],
},
{
id: 2,
text: "text2",
tags: [
{
id: 4,
key: "key1",
value: "value1",
},
{
id: 5,
key: "key2",
value: "value2",
},
],
},
]
我想用包含標簽信息的 JSON 查詢帖子:
[
{
key: "key1",
value: "value1",
},
{
key: "key2",
value: "value2",
}
]
因此,我有必要查詢描述帖子中標簽子集的標簽信息,例如多個鍵和值對,而無需在查詢中指定我將擁有多少參數,作為獎勵,這會很好通過使用 JSON 作為參數來完成所有這些。 所以對於上面的查詢,我會得到一個包含兩個帖子的答案。
如果您希望按標簽和值顯示所有帖子,您可以嘗試以下操作:
@Query("SELECT pst FROM Post pst JOIN pst.tags tgs WHERE tags.key = :key AND tags.value = :value")
List<Post> findByTags(@Param("key") String key, @Param("value") String value);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.