当前位置: 首页 > 知识库问答 >
问题:

Spring JPA是否提供了一种方法来知道一个项目列表中的至少一个元素是否与另一个项目列表中的至少一个元素匹配?

云宜人
2023-03-14

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;
}

我想检索每个hashtag与列表中至少一个hashtag匹配的活动。

例如:给定数据库中包含的活动:

[
 {
  "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 Query检查参数列表中是否存在列表的至少一个元素

但我希望避免使用此解决方案,因为这需要进行额外的昂贵查询。

共有1个答案

傅玮
2023-03-14

实际上,我设法找到了一个解决方案:关键字“IN”可以满足我的需要!

Page<ActivityEntity> findAllByHashtagsInAndDateIsGreaterThanEqual(List<HashtagEntity> hashtags, LocalDateTime date, Pageable pageable);
 类似资料:
  • 问题内容: 假设我有一个列表, 并且我想知道其中的至少一个数字是否存在于另一个列表中,例如这个列表: 换句话说,我想知道list中是否存在1,2或3 。我现在可以做类似的事情 但是,是否可能有一种方法可以使事情整齐? 问题答案: 有很多方法可以做到这一点。最直接的翻译是: 您还可以使用各种涉及集合的东西,例如: (这取决于元素是可哈希的,但如果这是真的,这很可能会更快地制定一套较大的出来的,并为任

  • 问题内容: 我有两个带有不同对象的列表。 我想检查list2中的元素是否存在于list2中,基于特定的属性(Object1和Object2具有(以及其他),一个共有属性(类型为Long),名为attributeSame)。 现在,我这样做是这样的: 但是我认为有一种更好,更快的方法可以做到这一点:)有人可以提出吗? 谢谢! 问题答案: 如果只需要测试基本相等性,则可以使用基本JDK来完成,而无需在

  • 我有两个不同对象的列表。 我想根据特定的属性(Object1和Object2有一个共同的属性(类型为Long),名为AttributeName),检查list2中是否存在list1中的元素。 现在,我是这样做的: 但我认为有更好更快的方法可以做到这一点:)有人能提出吗? 谢谢

  • 问题内容: 我正在尝试比较两个列表,如果第二个列表中有第一个列表中的任何值,则只打印一条消息。 在此示例中,我要对进行求值,因为两个列表中都包含5。这行不通,而且我不确定比较这两个列表的最简单方法。 问题答案: 您可以用很多方法解决。一个很容易理解的方法就是只使用一个循环。 一个更紧凑的方法是使用和: 更好的是,可以将其替换为: 您还可以使用集合:

  • 如果你有一个列表=1,3,5,7,9,... 如果你试图找到列表中的前一个元素(即[t-1],第三个元素是3,即5之前的那个元素),那么这个符号与得到比该元素少一个l(即5-1=4)有什么不同 我有一个增长率的列表,我想要昨天的数据,但我得到的数据总是比今天的少 我认为最后一行的x-1才是问题所在。有什么想法吗?谢谢

  • 问题内容: 给出以下列表: 我想将[a]的每个元素重复其在[b]中的对应位置的编号,以产生此结果: 即0发生1次,5发生2次,1发生1次。 问题答案: 内容如下: -重复elem次 从两个列表中组成一个2元组的列表,将每个元素与另一个列表中的对应元素配对。这为您提供了用例中需要传递给的确切信息。 -将迭代器的结果列表展平为单个值列表。您既可以像我一样,也可以像马丁·彼得斯那样。