微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

JPA 存储库 findBy 多对多关系的外键

如何解决JPA 存储库 findBy 多对多关系的外键

我在数据库中有以下关系

Database Diagram

这些是实体

公寓.java

@Entity
@Table(name = "apartment")
@Data
public class Apartment {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id_apartment")
private long id;

@ManyToMany
@JoinTable(
 name = "apartment_facility",joinColumns = @JoinColumn(name = "id_apartment"),inverseJoinColumns = @JoinColumn(name = "id_facility"))

@Column(name = "city")
private String city;

@Column(name = "country")
private String country;
}

Facility.java

public class Facility {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id_facility")
private long id;

@Column(name = "name")
private String name;
}

我的问题是如何在 JpaRepository 中创建 findBy 方法以查找所有具有所需设施的公寓

我在考虑这个请求的结果:

api/apartments/findByFacilities?facilities=gym,pool,parking

我曾尝试进行查询,但无法完全理解。还尝试使用 Jpa 如下

List<Apartment> findByFacilities(@RequestParam("facilities") List<String> facilities);

但是我收到以下错误。有攻略吗?

Failed to convert from type [java.lang.String] to type [java.lang.Long]

解决方法

在您的第一个代码块 List <Facility> facilities = new ArrayList<>(); 中,我猜您忘记添加代码行了。

当我看到您在下面的链接时,我了解到您想按设施的名称进行搜索。

api/apartments/findByFacilities?facilities=gym,pool,parking

为此,您在 Repository 中的代码应如下所示:

List<Apartment> findDistinctByFacilitiesNameIn(List<String> facilities);

如果我们不在这里添加 distinct supported keyword,每条记录的重复次数与其包含的 facilities 一样多。

如果您想以不同的方式搜索 like,not like,etc.,请参阅此处的 supported keywords inside method names 表:Query Creation 文档。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。