【问题标题】:Spring Data JPA findAll where a Set contains a SetSpring Data JPA findAll,其中一个集合包含一个集合
【发布时间】:2021-12-24 03:19:21
【问题描述】:

我正在尝试找到一种方法来查找某个字段(MySQL Set of numbers)包含一个项目或一组项目的位置。我看到有一个 contains 关键字,但我不确定这是否适用于 Set。

我在想这样的事情:

public interface IScheduleRepository extends Repository<Schedule, Long> {
    @Transactional(readOnly = true, propagation = Propagation.SUPPORTS)
    List<Schedule> findAllByDaysOfTheWeekContains(Set<Long> days);
}

并且在时间表类中:

@ElementCollection
private List<Long> daysOfTheWeek;

Spring Data JPA 是否支持检查集合是否包含项目?或者更进一步,如果集合包含一个集合?

【问题讨论】:

  • JPA 需要一个实体的属性,例如 findAllByFirstNameIn(List names);确定查询数据时要使用的列名。如果 daysOfTheWeek 是一个属性,那么用户 findAllByDaysOfTheWeekIn(Set days)
  • @krishnathota 是的,就是这样。 daysOfTheWeek 存储为一组数字,我想检索给定数字(或一组数字)在该集中的行。 In 关键字是否能够实现该集合成员资格?
  • 是的,In 应该为你做这件事。如果不起作用,请尝试让我知道。
  • @krishnathota 那行不通。我认为 Sets 只能存储字符串。我很难弄清楚如何为集合设置默认值并为行插入值

标签: java spring-boot jpa spring-data-jpa


【解决方案1】:

List&lt;Schedule&gt; findAllByDaysOfTheWeekIn(Set&lt;Long&gt; days); 应该可以正常工作,如果 daysOfTheWeek 是实体属性(列)。请参阅this 了解更多详情。在查询创建下,您可以看到组合。

【讨论】:

    猜你喜欢
    • 2019-05-06
    • 1970-01-01
    • 2014-12-18
    • 1970-01-01
    • 2012-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-21
    相关资源
    最近更新 更多