Spring Data JPA findBy一个集合[重复]

Posted

技术标签:

【中文标题】Spring Data JPA findBy一个集合[重复]【英文标题】:Spring Data JPA findBy a collection [duplicate] 【发布时间】:2019-05-06 06:09:10 【问题描述】:

我正在使用 JPA 在 Java 中开发路线规划系统。 我需要创建一个 findBy 方法来通过其包含的城市列表查找路线。 以下是课程:

@Entity
public class Route 

    @ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    private List<City> cities = new ArrayList<>();
    .
    .


@Entity
public class City 
    .
    .

现在我尝试了,但并不奇怪它不起作用,如下:

@Repository
public interface RouteRepository extends JpaRepository<Route, Long> 
    Optional<Route> findByCities(List<City> city);

有没有一种简单的方法可以使用 JPA 来完成,或者我必须自己编写一个困难的 @Query 并以某种方式迭代,以通过集合查找实体?

【问题讨论】:

为什么不起作用?根据文档,它应该。 你能完整展示你的 City 类吗? 城市是否完全匹配?还是它们是子集? 【参考方案1】:

您可以更改 RouteRepository 中方法的签名,以使用 IN 运算符。

@Repository
public interface RouteRepository extends JpaRepository<Route, Long> 
    Optional<Route> findByCitiesIn(List<City> cities);

那么它应该可以工作。但是请注意,它不是完全匹配。 查看更多

https://docs.spring.io/spring-data/jpa/docs/2.1.x/reference/html/#jpa.query-methods

【讨论】:

以上是关于Spring Data JPA findBy一个集合[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Spring Data JPA 之间 findBy / findAllBy 的区别

spring data jpa getOne 抛出 LazyInitializationException 和 findBy 不

spring data jpa 创建方法名进行简单查询

学习-spring data jpa

Spring数据JPA中findBy和findOneBy的区别

Spring JPA/Hibernate findby 列名返回空集合