![](/img/trans.png)
[英]How can I convert this 3 JOIN query into a Spring Data JPA named query method?
[英]How can i apply native join query in spring data jpa?
這是我的實體類。
招聘信息.java
@Entity
@Table(name = "job_post")
public class JobPost {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "job_post_id")
private Long jobPostId;
@Column(name = "job_title")
private String jobTitle;
@Column(name = "job_description")
private String jobDescription;
@Column(name = "vacancy")
private int vacancy;
@Column(name = "posted_date")
@JsonFormat(pattern = "yyyy-MM-dd")
private Date postedDate;
@Column(name = "total_applicants")
private int totalApplicants;
}
求職申請.java
@Entity
@Table(name = "job_application")
public class JobApplication {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "job_application_id")
private Long jobApplicationId;
@Column(name = "job_post_id")
private Long jobPostId;
@Column(name = "applicant_id")
private Long applicantId;
}
申請人.java
@Entity
@Table(name = "applicant")
public class Applicant {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "applicant_id")
private Long applicantId;
@Column(name = "applicant_name")
private String applicantName;
@Column(name = "applicant_mobile_no")
private String applicantMobileNo;
@Column(name = "applicant_email")
private String applicantEmail;
}
我的主要目標是要上市的JobPostId的ApplicantList。 我對 Spring 數據 JPA 完全陌生。 JPA 映射是否正確? 我不知道應該觸發哪個查詢才能根據 jobPostId 獲取申請者列表。
我建議使用 JpaMappings 並使用 SpringData 而不是使用本機查詢。 要遵循的步驟:多對多:
使用JoinTable 直接映射JobPost 和Applicant,而不是單獨創建一個類。
幫助鏈接: https : //attacomsian.com/blog/spring-data-jpa-many-to-many-mapping
使用 SpringData JPA findOne 或 findById 方法(取決於 spring 版本)。 如果您使用 EAGER fetch,那么它將為您提供與 JobPost Id 關聯的所有申請人。
一對多
保留 JobApplication 類並使用 OneToMany 注釋。
幫助鏈接: https : //attacomsian.com/blog/spring-data-jpa-one-to-many-mapping
詢問:
@Query("select a from JobPost j inner join j.jobApplicantList ja inner join ja.applicant a where j.jobPostId=:jobPostId")
List<String> findAllJobApplicants(@Param("jobPostId") Long jobPostId);
我認為您應該以這種方式配置映射。為此,您只需要兩個實體 JobPost.java
@Entity
@Table(name = "job_post")
public class JobPost {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "job_title")
private String jobTitle;
@Column(name = "job_description")
private String jobDescription;
@Column(name = "vacancy")
private int vacancy;
@Column(name = "posted_date")
@JsonFormat(pattern = "yyyy-MM-dd")
private Date postedDate;
@Column(name = "total_applicants")
private int totalApplicants;
@ManyToMany
@JoinTable(name = "applicant_job_post",
joinColumns = {
@JoinColumn(name = "job_post_id", referencedColumnName = "id")
}, inverseJoinColumns = {
@JoinColumn(name = "applicant_id", referencedColumnName = "id")
})
private Set<Applicant> applicants;
public JobPost() {
}
public void addApplicant(Applicant applicant) {
applicants.add(applicant);
applicant.getJobPosts().add(this);
}
public void removeApplicant(Applicant applicant) {
applicants.remove(applicant);
applicant.getJobPosts().remove(this);
}
}
申請人.java
@Entity
@Table(name = "applicant")
public class Applicant {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "applicant_name")
private String applicantName;
@Column(name = "applicant_mobile_no")
private String applicantMobileNo;
@Column(name = "applicant_email")
private String applicantEmail;
@ManyToMany(mappedBy = "applicants")
private Set<JobPost> jobPosts;
public Applicant() {
}
public void addJobPost(JobPost jobPost) {
jobPosts.add(jobPost);
jobPost.getApplicants().add(this);
}
public void removeJobPost(JobPost jobPost) {
jobPosts.remove(jobPost);
jobPost.getApplicants().remove(this);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.