database - Spring JPA - 应用 WHERE 子句乘以嵌套表
问题描述
我已经创建了之前很复杂的问题。所以我正在创建一个尽可能简单的新版本。
我在使用 Spring JPA 时遇到问题,尤其是两次嵌套结构。
这是一个超级简单的关系图:
该国有多条河流,河流可以流经多个国家。这条河有多座桥梁,但这座桥只能建在一条河流上。所以 M:N -> 1:N
这是预期的结果:
{
countries: [
{
countryID: 1,
rivers: [
{
riverID: 1,
bridges: [{
bridgeID: 1
}]
}
]
}
]
}
这就是我所拥有的。
国家实体
public class Country {
@Id
@GeneratedValue(strategy= GenerationType.IDENTITY)
private Long id;
... more columns
@ManyToMany(fetch = FetchType.EAGER,
cascade = {
CascadeType.PERSIST,
CascadeType.MERGE
})
@JoinTable(name = "country_river",
joinColumns = { @JoinColumn(name = "countryid") },
inverseJoinColumns = { @JoinColumn(name = "riverid") })
private Set<River> rivers = new HashSet<>();
河流实体
public class River {
@Id
@GeneratedValue(strategy= GenerationType.IDENTITY)
private Long id;
... more columns
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.REMOVE)
@JoinColumn(name = "riverid")
private Set<Bridge> Bridges;
无需提及 Bridge 实体,因为仅指定了 ID 列(我使用的是单向关系)
问题是,桥不是根据国家过滤的。正如您在预期输出中看到的那样,我想列出所有国家以及给定国家的相关河流和桥梁。
我是否必须在 River 实体内的 Bridges 上创建自定义查询(如果是,如何。)?还是我必须以某种方式更改数据库的结构?
解决方案
推荐阅读
- next.js - 如何在 nextjs 中创建引导 5 个选项卡?
- windows - 仅在一个客户端上的 SSL 证书撤销状态
- arrays - 为什么我的代码不起作用,没有任何作业
- java - 生产者消费者使用wait/notifyAll
- c# - 响应大小问题?- 底层连接已关闭:服务器关闭了预期保持活动状态的连接
- python - Python pandas:对分组的第一行和最后一行应用操作并将结果添加为列的最佳方法是什么?
- java - 在kotlin中按asc顺序对字符串列表进行排序
- flutter - 如何使 VS 代码能够在子项目目录中查找代码以自动完成?
- c++ - 为什么显示消息,QSqlQuery :: value: not定位在有效记录上,当我显示信息时
- python - 使用 sqlalchemy 创建的雪花表需要引号 ("") 才能查询