我試圖在下面的類圖中建模作業門戶用例。我已經使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