如何解决JPA 存储库 findBy 多对多关系的外键
我在数据库中有以下关系
这些是实体
公寓.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 举报,一经查实,本站将立刻删除。