我试图在下面的类图中建模作业门户用例。我已经使Skill实体可以被工作以及希望重用的求职者共享。面向对象设计和休眠
我修改了我的oo设计,因为我分享了我认为它的M:N关系而不是1:N的技巧。
- http://imagebin.org/219822(修订与M:N与技能的关系)
- http://imagebin.org/219680(旧有1:N与技能的关系)
问题:
我怎样才能做到下面的事情使用休眠?我需要诉诸SQL吗?
- 因为Skill有M:N关系,它需要关联表JobSkill和SeekerSkill。如何创建工作或求职者实例,以便他们使用数据库中的现有技能?
- 我需要做的技能相匹配,使得职业技能的要求是候选的子集 技能:
一)用人单位E1:找到所有候选人 - 1 {工作+ 1 {候选人} N}ñ
二)候选人C1 :找到所有的工作 - 1 {工作+雇主} N
我想为这种情况添加一个业务服务类作为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 ?
}
}
我从你了解到我需要找到持久的技能,并把它添加到工作/导引头。如果没有找到一些技能,那么将它们添加到求职者/求职者组合中可以适当地创建他们。该关系是M:N,因此它将根据配置在关联表中创建映射。你的第二个查询很好的学习如何使用HQL **,而不必像在原始sql中那样显式地处理关联表。 1 {x} N表示正则表达式中的重复像x {1,N}。谢谢。 – Miten 2012-07-08 07:13:42
添加它们不会创建它们。你需要明确地调用persist()或save()。 – 2012-07-08 07:48:46
**请看你是否可以写出与HQL中的求职者技巧相匹配的查询。求职者技能经验可以> =工作技能经验,以符合条件。**我需要每个技能比赛结果集中的员工,工作记录。结果可以由员工分组。后来我需要在关联表中取得经验属性而不是技能表。当我们添加新项目来设置它们被添加到项目表时,我认为M:N关系项目应该被添加到关联以及像1:N关系那样的技能表中? – Miten 2012-07-08 09:36:43