spring - Spring boot JPA如何查询@OneToMany关系给定一个对象的多关系
问题描述
我已经看到了一些相关的问题,但我似乎无法为我正在尝试做的事情找到正确的答案。我有两张表 Jobs 和 Workers,一个job 可以有很多workers,简化实体
@Entity
@Table(name = "jobs")
data class Job(
@Id
@Type(type = "pg-uuid")
val id: UUID = UUID.randomUUID()
) {
@ManyToOne
var office: Office? = null
@OneToMany(targetEntity = Worker::class)
var requests: MutableList<Worker> = mutableListOf()
}
我希望能够获取特定工作人员的工作列表
我已经尝试了一些本地查询而不是本地查询,但是现在尝试通过 namedMethods 来完成它,老实说,我想这里的任何工作似乎都应该在我的工作回购中工作
@Repository
interface JobsRepo : CrudRepository<Job, UUID> {
@Query("SELECT j FROM Job j WHERE id = ?1")
fun findJobById(id: UUID): Job?
@Query("SELECT j FROM Job j WHERE office_id = ?1")
fun findJobsByOffice(id: UUID): List<Job>?
@Modifying
@Transactional
@Query("UPDATE jobs SET job_status = 4 WHERE job_status = 1 AND start_time < ?1", nativeQuery = true)
fun expireJobs(date: Date)
fun findByRequests_Worker(worker: Worker): List<Job>?
}
我不太确定如何查询数组属性
requests
在一名工人的投入下。我也尝试查询工作人员的 UUID,因为那是连接表中的内容
JPA 使用该表的两个外键创建一个连接表
jobs_requests
和列
job_id UUID
requests_id UUID
解决方案
您提到一个 Job 可以有许多工人,并且您还提到您想要获取特定工人的工作列表。所以这听起来像是多对多关系而不是单对多关系。
对于多对多关系,连接表是不可避免的。您需要在两个实体上指定 @ManyToMany 注释,然后您可以使用 WorkerRepository 查询工作人员,然后获取该工作人员的工作列表,您只需通过 worker.getJobs() 访问即可。
以下是ManyToMany关系的设置,希望对您有所帮助:
@Entity
@Table(name = "jobs")
data class Job (
@ManyToMany
@get:ManyToMany
@get:JoinTable(
name = "worker_job",
joinColumns = [JoinColumn(name = "job_id")],
inverseJoinColumns = [JoinColumn(name = "worker_id")]
)
val worker: Set<Worker> = HashSet()
)
@Entity
@Table(name = "worker")
data class Worker (
@ManyToMany
@get:ManyToMany
@get:JoinTable(
name = "worker_job",
joinColumns = [JoinColumn(name = "worker_id")],
inverseJoinColumns = [JoinColumn(name = "job_id")]
)
val jobs: Set<Jobs> = HashSet()
)
推荐阅读
- r - 用于创建具有数据框中每个日期的最小值和最大值的表的函数
- python - 派生类中来自父级的成员会干扰,具体取决于初始化
- javascript - 特定于 A 帧的动画
- azure-databricks - 删除 Azure Databricks 中浮点列的尾随零 - Scala
- npm - 如何使 npm 的全局安装可移植?
- icalendar - 通过标记为私有的 ICS 协议创建约会
- javascript - 我需要知道如何执行 python shell 命令并获得恒定输出
- r - 无法使用 R 读取 XML 文件
- jpeg - 无法批量加载,因为文件无法打开。操作系统错误代码(空)
- haskell - 使用 HashMap 的 Sum 类型