Spring JPA是否提供了一种方法来了解项目列表的至少一个元素是否匹配另一个项目列表中的一个元素?
Spring Data JPA是否提供了一个查询关键字,以检查列表中至少包含的一项是否匹配了另一个列表中包含的项目之一。
这是我的查询:(***应该是我要寻找的关键字。例如:包含,在...但是我不知道哪一个是正确的。)
Page<ActivityEntity> findAllByHashtags***AndDateIsGreaterThanEqual(List<HashtagEntity> hashtags, LocalDateTime date, Pageable pageable);
更多信息:这是我的活动实体。
public class ActivityEntity {
@Id
@GeneratedValue
private Long id;
private String name;
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm a z")
private LocalDateTime date;
@ManyToMany(cascade=CascadeType.ALL)
@Cascade({org.hibernate.annotations.CascadeType.DELETE, org.hibernate.annotations.CascadeType.REMOVE})
private List<HashtagEntity> hashtags;
}
我想检索每个主题标签至少匹配列表中包含的主题标签的每个活动。
例如 : 鉴于数据库中包含的活动:
[
{
"id": 1,
"name": "Karaoke time",
"date": "2022-05-28T12:30:00Z",
"hashtags":
[
{ "name": "fun" }, { "name": "karaoke"}, { "name": "friend" }
]
},
{
"id": 2,
"name": "Just Dance Session V.1",
"date": "2022-05-28T12:30:00Z",
"hashtags":
[
{ "name": "fun" }, { "name": "dance"}
]
}
]
如果我提供以下主题标签列表:
[
{ "name": "karaoke" }, { "name": "heavy metal"}
]
我应该收到:
[
{
"id": 1,
"name": "Karaoke time",
"date": "2022-05-28T12:30:00Z",
"hashtags":
[
{ "name": "fun" }, { "name": "karaoke"}, { "name": "friend }
]
}
]
我看到有关该主题的另一篇文章: spring jpa查询检查是否在参数列表中至少存在列表的至少一个元素
但是我想避免使用此解决方案,因为这需要进行额外的昂贵查询。
Does Spring Data JPA provide a query keyword to check if at least one item contained in a list match at least one of the items contained in another list.
Here's my query : (*** should be the keyword I'm looking for. Ex : contains, in , ... but I don't know which one is the right one.)
Page<ActivityEntity> findAllByHashtags***AndDateIsGreaterThanEqual(List<HashtagEntity> hashtags, LocalDateTime date, Pageable pageable);
Some more information : Here's my Activity entity.
public class ActivityEntity {
@Id
@GeneratedValue
private Long id;
private String name;
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm a z")
private LocalDateTime date;
@ManyToMany(cascade=CascadeType.ALL)
@Cascade({org.hibernate.annotations.CascadeType.DELETE, org.hibernate.annotations.CascadeType.REMOVE})
private List<HashtagEntity> hashtags;
}
I'd like to retrieve every activity whom hashtags match at least one of the hashtags contained in a list.
For example :
Given the activities contained in the database :
[
{
"id": 1,
"name": "Karaoke time",
"date": "2022-05-28T12:30:00Z",
"hashtags":
[
{ "name": "fun" }, { "name": "karaoke"}, { "name": "friend" }
]
},
{
"id": 2,
"name": "Just Dance Session V.1",
"date": "2022-05-28T12:30:00Z",
"hashtags":
[
{ "name": "fun" }, { "name": "dance"}
]
}
]
If I provide the following hashtags list :
[
{ "name": "karaoke" }, { "name": "heavy metal"}
]
I should receive :
[
{
"id": 1,
"name": "Karaoke time",
"date": "2022-05-28T12:30:00Z",
"hashtags":
[
{ "name": "fun" }, { "name": "karaoke"}, { "name": "friend }
]
}
]
I see there is another post on the subject : Spring JPA Query Check If At Least One Element of a List Exists in Parameter List
But I'd like to avoid this solution because this would require to make an additional costly query.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我实际上设法找到了一个解决方案:
关键字“在”中适用于我想要的!
I actually managed to find a solution :
The keyword "IN" works for what I want !