gpt4 book ai didi

java - 通过spring mvc在hibernate中使用@ElementCollection检索表会导致表的多个实例

转载 作者:行者123 更新时间:2023-12-01 11:48:47 24 4
gpt4 key购买 nike

我用 @ElementCollection 创建了一个表,例如

表名称是作业

 @ElementCollection(fetch=FetchType.EAGER)
@CollectionTable(name="JobSkills", joinColumns=@JoinColumn(name="job_Id"))
@GenericGenerator(name= "hilo-gen" ,strategy = "hilo")
@CollectionId(columns= { @Column(name= "jobSkillId") }, generator= "hilo-gen", type= @Type(type="long"))
Collection<JobSkill> jobSkill = new ArrayList<JobSkill>();

另一张表是

@Embeddable
public class JobSkill {
String skill;
//getter setters
}

问题是当我在 Controller 中获取作业表并将其显示在 jsp 中时,作业表出现的次数与它获得技能的次数一样多。如果我输入 3 个技能,它会出现 3 次。

我的 Controller 方法是

@RequestMapping(value= "getalljobs")
public String getAllJobsForm(Model model){

List<Job> allJobs = companyService.getallPostedJobs(getCmpName());
model.addAttribute("allJobs", allJobs);
model.addAttribute("companyname",getCmpName());

return "alljobs";
}

获取作业表列表和我的 Jsp 页面是

<div class="container">
<div class="row">
<c:forEach items="${allJobs }" var="job">
<div class="col-sm-6 col-lg-3">
<div class="thumbnail">
<div class="caption">
<h5>Job id : ${job.jobId }</h5>
<h5>Job Title : ${job.jobTitle }</h5>
<h5>Job Location : ${job.jobLocation }</h5>
<h5>expRequired : ${job.expRequired }</h5>
<h5>higestQualification : ${job.higestQualification }</h5>
<h5>jobDescription : ${job.jobDescription }</h5>
<h5>overAllPerReq : ${job.overAllPerReq }</h5>
<h5>salaryMin : ${job.salaryMin }</h5>
<c:forEach items="${job.jobSkill }" var="skills">
<h3>Skill : ${skills.skill }</h3>
</c:forEach>

<a href="<spring:url value='/company/deletejob?id=${job.jobId }' />" class="btn btn-warning">Delete</a>
<a href="<spring:url value='/students/edit?id=${job.jobId }' />" class="btn btn-success">Edit</a>
</div>
</div>
</div>
</c:forEach>
</div>

在jsp页面中,作业表以相同的id(主键)列出了三次。

我做错了什么。如果需要了解问题,将发布更多代码。

为了更好地理解问题,我在 Controller 中有 sysout。输出为

@RequestMapping(value= "getalljobs")
public String getAllJobsForm(Model model){


List<Job> allJobs = companyService.getallPostedJobs(getCmpName());
model.addAttribute("allJobs", allJobs);
model.addAttribute("companyname",getCmpName());


System.out.println("----------------");
for(Job job: allJobs){
System.out.println(job.getJobId());
for(JobSkill skill: job.getJobSkill()){
System.out.println(skill.getSkill());
}
}

return "alljobs";
}

输出

1
java
php
sql

1
java
php
sql

1
java
php
sql

它重复了3次,因为我输入了3个技能。输出中的 1 是 jobId。

最佳答案

将映射从 List 更改为 Set 解决了问题。

关于java - 通过spring mvc在hibernate中使用@ElementCollection检索表会导致表的多个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28943027/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com