我尝试过像下面的类图那样对作业门户用例进行建模。我已经使技能实体,作为共享的工作,以及求职者,希望重用。
我已经修改了我的oo设计,因为我分享了这个技能,我想它意味着它的M:N关系,而不是1:N。
问题:
我如何使用hibernate来做下面的事情?我需要求助于SQL吗?
我正在考虑为本例添加一个Business类,作为JobPortal,并使用下面的伪代码中的一些方法。如果可以回答方法findJobsForSeeker所需的HQL查询
public class JobPortal {
public int createEmployer(String name, Address address) {
Employer e = null;
HBUtil.create(e = new Employer(name, address));
return e.getId();
}
public void addJobToEmployer(int empid, String jobName, String[][] skills) {
Employee e = HBUtil.get(empid, Employee.class);
Job j = new Job(jobName);
Skill s = null;
for(int i=0; i<skills.length; i++) {
s = HBUtil.find(skills[i][0], skills[i][1], Skill.class);
if (null == s) {
s = new Skill(skills[0], Interger.parseInt(skills[1])); //name, experience
}
j.add(s);
}
e.add(j);
HBUtil.save(e);
}
public int createSeeker(String name) {
Seeker s = null;
DBUtil.create(s = new Seeker(name));
return s.getId();
}
public void addSkillsToSeeker(int sid, String[][] skills) {
Seeker seeker = HBUtil.get(sid, Seeker.class);
for(int i=0; i<skills.length; i++) {
s = HBUtil.find(skills[i][0], skills[i][1], Skill.class);
if (null == s) {
s = new Skill(skills[0], Interger.parseInt(skills[1])); //name, experience
}
seeker.add(s);
}
HBUtil.save(seeker);
}
public void findJobsForSeeker(int sid) {
//what HQL do use ?
}
}
发布于 2012-07-07 12:08:45
要回答你的第一个问题:你寻找你想要附加到新工作或求职者的技能(通过HQL查询)。一旦你找到了这些技能,你就把它们添加到新工作或求职者的技能集合中:
List<Skill> skills = session.createQuery("select skill from Skill skill where ...")
.list();
for (Skill skill : skills) {
newJob.addSkill(skill);
}
我不明白你在第二个问题中使用的语法。如果你想找到所有在某一套技能中具备所有技能的求职者:
select seeker from Seeker seeker where not exists (
select skill.id from Skill skill where skill in (:skillSet)
and skill.id not in (select skill2.id from Seeker seeker2
inner join seeker2.skills skill2
where seeker2 = seeker))
发布于 2012-07-07 14:11:40
还不完全清楚你在问什么,但我会再补充一些
1)如果您的问题是如何映射hibernate中的实体,则可以使用ManyToMany和JoinTable注释查找
(http://www.dzone.com/tutorials/java/hibernate/hibernate-example/hibernate-mapping-many-to-many-using-annotations-1.html)。
如果您创建一个实际的ManyToMany实体(例如,一个探索者有多个SeekerSkills,而一个技能有多个SeekerSkills),您也可以使用2 OneToMany来建模SeekerSkill关系。
如果您的问题是如何用数据库中现有的技能填充就业/求职者,那么我只需编写一个一次性的SQL脚本,用适当的技能(jobSkills和seekerSkills)填充我的关联表。
2)一种检查分类的方法,假设工作/求职者没有不止一次列出相同的技能,那就是加入一项技能,按求职者/求职者分组,并确保你得到了适当的计数。
例如,
探索者-杰夫拥有以下技能: java,web开发,设计
工作- jobA需要技能: java,设计
杰夫正在寻找与他的技能相匹配的工作。
这是SQL,所以您必须将其转换为HQL。
select job_id from job_skill
inner join seeker_skill on job_skill.skill = seeker_skill.skill
where seeker_id = :seeker_id // this is a var for jeff's id
group by job_id
having count(*) > :num_required_skills // in our case, 2
https://stackoverflow.com/questions/11372926
复制相似问题