Spring boot JPA如何在多个关系中给定一个对象来查询@OneToMany关系
我看到了一些相关的问题,但我似乎找不到正确的答案。 我有两个表格作业和工人,一个作业可以有很多工人,简化实体Spring boot JPA如何在多个关系中给定一个对象来查询@OneToMany关系,spring,spring-boot,spring-data-jpa,spring-data,Spring,Spring Boot,Spring Data Jpa,Spring Data,我看到了一些相关的问题,但我似乎找不到正确的答案。 我有两个表格作业和工人,一个作业可以有很多工人,简化实体 @Entity @Table(name = "jobs") data class Job( @Id @Type(type = "pg-uuid") val id: UUID = UUID.randomUUID() ) { @ManyToOne var office: Office? = null @
@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()
}
由一名工人输入。我也尝试过查询worker的UUID,因为这是join表中的内容
JPA创建一个包含两个外键的联接表,该表是
jobs_requests
和列
job_id UUID
requests_id UUID
您提到一个工作可以有许多工人,并且您还提到您希望获得特定工人的工作列表。所以这听起来像是一种多人的关系,而不是一个女人的关系 对于多个关系,联接表是不可避免的。您需要在这两个实体上指定@ManyToMany注释,然后可以使用WorkerRepository查询工作进程,然后获取该工作进程的作业列表,您只需要通过worker.getJobs()访问 以下是多人关系的设置,希望能有所帮助:
@实体
@表(name=“jobs”)
数据类作业(
@许多
@得到:很多
@get:可连接(
name=“worker\u job”,
joinColumns=[JoinColumn(name=“job_id”)],
inverseJoinColumns=[JoinColumn(name=“worker\u id”)]
)
val worker:Set=HashSet()
)
@实体
@表(name=“worker”)
数据类工作者(
@许多
@得到:很多
@get:可连接(
name=“worker\u job”,
joinColumns=[JoinColumn(name=“worker\u id”)],
inverseJoinColumns=[JoinColumn(name=“job\u id”)]
)
val作业:Set=HashSet()
)
您提到一个工作可以有许多工人,并且您还提到您希望获得特定工人的工作列表。所以这听起来像是一种多人的关系,而不是一个女人的关系
对于多个关系,联接表是不可避免的。您需要在这两个实体上指定@ManyToMany注释,然后可以使用WorkerRepository查询工作进程,然后获取该工作进程的作业列表,您只需要通过worker.getJobs()访问
以下是多人关系的设置,希望能有所帮助:
@实体
@表(name=“jobs”)
数据类作业(
@许多
@得到:很多
@get:可连接(
name=“worker\u job”,
joinColumns=[JoinColumn(name=“job_id”)],
inverseJoinColumns=[JoinColumn(name=“worker\u id”)]
)
val worker:Set=HashSet()
)
@实体
@表(name=“worker”)
数据类工作者(
@许多
@得到:很多
@get:可连接(
name=“worker\u job”,
joinColumns=[JoinColumn(name=“worker\u id”)],
inverseJoinColumns=[JoinColumn(name=“job\u id”)]
)
val作业:Set=HashSet()
)
同样值得注意的是,对于所有实际用途,您应该尽量避免显式的多个注释。您应该创建一个新的实体/表,该实体/表将包含Job和Worker的字段,这两个字段都与各自的实体有许多关联
您应该避免显式多工的原因是,比如说有一个特定的工作,例如JavaDev,并且给定的工作上有1000名工人。在某一点上,您有一个JavaDev实体,您希望得到所有年龄在20到25岁之间的员工。为此,需要迭代Workers列表,该列表是JavaDev实体的一部分,并将其过滤掉。发生这种情况时,有两种情况:
如果您创建自己的manytomy(例如job_workers)表,并附带存储库和服务,则可以避免所有这些问题,这样您就可以更高效地查询数据。值得注意的是,对于所有实际用途,您应该尽量避免显式的manytomy注释。您应该创建一个新的实体/表,该实体/表将包含Job和Worker的字段,这两个字段都与各自的实体有许多关联 您应该避免显式多工的原因是,比如说有一个特定的工作,例如JavaDev,并且给定的工作上有1000名工人。在某一点上,您有一个JavaDev实体,您希望得到所有年龄在20到25岁之间的员工。为此,需要迭代Workers列表,该列表是JavaDev实体的一部分,并将其过滤掉。发生这种情况时,有两种情况:
如果您创建自己的manytomany(例如job_workers)表,以及附带的存储库和服务,那么所有这些都可以避免,从中您可以更高效地查询数据。您可以向我们展示您的实体及其关系的数据库映射吗?您的数据库脚本呢?
jobs_requests
job_id UUID
requests_id UUID