2011-11-29 19 views
0

我是新手到冬眠的世界,所以在下面的條件下編寫映射文件時有點困惑。如何做到這一點休眠映射?

我有下面的類,我想用Hibernate來持久:

class Project { 
    int projectID; 
    List<String> clients; 
    List<String> employers; 

    List<String> technologies; 
    String description; 
} 

我已經創建了手動數據庫下表:

+---------------------------+ 
      project 
+---------------------------+ 

project_id (pk) | description 
+---------------------------+ 

+---------------------------+  
      organizations 
+---------------------------+ 
    org_id(pk)  | org_name 
+---------------------------+ 

鏈接organizationproject表,我有以下表格:

+-------------------------------------------------------------+ 
         project_clients 
+-------------------------------------------------------------+ 
    project_id(fk of projects) | client_id(fk of organizations) 
+-------------------------------------------------------------+ 

+-------------------------------------------------------------+ 
        project_employers 
+-------------------------------------------------------------+ 
    project_id(fk of projects) | employer_id(fk of organizations) 
+-------------------------------------------------------------+ 

我不知道如何將這些表我project類映射線索?任何想法如何完成?

我試圖利用列表,但與列表持久性我們不能使用鏈接表像(project_clientsproject_employers),我不想爲客戶端列表和僱主列表創建單獨的類。或者它是唯一的選擇?

請幫忙!


編輯1 謝謝你們的答案。我還有一個查詢。如何告訴客戶端的hibernate(例如'foo company')它應該在組織表中搜索'foo company',並且如果該名稱存在,那麼獲取其相應的ID並將其放入project_clients表中。如果'foo company'不存在於'組織'表中,那麼添加它,然後獲取其相應的ID。我也想爲僱主做同樣的事情。在冬眠中可以做這件事情嗎?

目前我已經用java編寫程序來完成所有這些工作。


回答

0

如果你正在尋找一種簡單的方式來實現你想要什麼:

import javax.persistence.ElementCollection; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.Id; 

@Entity 
class Project { 
    @Id 
    @GeneratedValue 
    int projectID; 
    @ElementCollection 
    List<String> clients; 
    @ElementCollection 
    List<String> employers; 
    @ElementCollection 
    List<String> technologies; 
    String description; 
} 

注意@CollectionsOfElements已過時,所以你最好使用@ElementCollection

讓我知道它是否適合你!

1

我想下面的映射將解決你的問題

@Entity 
    @Table(name="project") 
    class Project { 

    @Id 
    @GeneratedValue 
    int projectID; 
    String description; 
    //for joing the tables (many-to-many) 
    @ManyToMany(cascade=CascadeType.ALL) 
    @JoinTable(name = "project_clients", 
    joinColumns = { 
       @JoinColumn(name="projectId") 
      }, 
    inverseJoinColumns = {@JoinColumn(name="clientId")}) 

    private Set<Organization> clients; 

    public Set<Organization> getClients(){ 
     return clients; 
    } 
    public void setClients(Set<Organization> clients){ 
     this.clients= clients; 
    } 

    //same for employers 

    @ManyToMany(cascade=CascadeType.ALL) 
    @JoinTable(name = "project_employers", 
    joinColumns = { 
       @JoinColumn(name="projectId") 
      }, 
    inverseJoinColumns = {@JoinColumn(name="employerId")}) 

    private Set<Organization> employers; 

    public Set<Organization> getEmployers(){ 
     return employers; 
    } 
    public void setEmployers(Set<Organization> employers){ 
     this.employers= employers; 
    } 

} 
+0

您好,感謝您的回答。我有一個查詢。如何告訴客戶端的hibernate(例如'foo company')它應該在組織表中搜索'foo company',並且如果該名稱存在,那麼獲取其相應的ID並將其放入project_clients表中。如果'foo company'不存在於'組織'表中,那麼添加它,然後獲取其相應的ID。我也想爲僱主做同樣的事情。在冬眠中可以做這件事情嗎? – Shekhar