2011-05-06 67 views
0

現在,我在使用Hibernate映射鏈接表時遇到問題。映射鏈接表與休眠狀態下的3個PK

首先,我想解釋我想要映射的內容: 我有3個表格:Product,DocumentType,Language。

一個產品可以在每個DocumentType(目前,我們有7個DocumentTypes)在每個特定語言(目前我們有3種語言)這意味着產品的「1」可以有DocumentType「A」,在語言

「EN」,「ES」和「FR」。

我用3個外鍵創建了一個鏈接表,它們也是複合主鍵。

這是我的SQL看起來像。

CREATE TABLE Person(
    id int PRIMARY KEY AUTO_INCREMENT, 
    name varchar(255) 
); 

CREATE TABLE DocumentType(
    id int PRIMARY KEY AUTO_INCREMENT, 
    name varchar(255), 
    key varchar(255) 
); 

CREATE TABLE Language(
    id int PRIMARY KEY AUTO_INCREMENT, 
    name varchar(255), 
    code varchar(2) 
); 

CREATE TABLE Person_DocumentType_Language(
    person_id int NOT NULL, 
    doc_id int NOT NULL, 
    lang_id NOT NULL, 
    FOREIGN KEY(person_id) 
    REFERENCES Person(id), 
    FOREIGN KEY(doc_id) 
    REFERENCES DocumentType(id), 
    FOREIGN KEY(lang_id) 
    REFERENCES Language(id), 
    PRIMARY KEY(person_id, doc_id, lang_id) 
); 

通過最後一個鏈接表,我可以知道哪個Person具有哪些DocumentTypes以及哪些語言。 我最感興趣的是DocumentType具有哪個語言的人。

說我是人A.現在我想知道哪些DocumentTypes與哪些語言。在SQL它看起來像這樣我認爲:

Select doc_id, lang_id from Person_DocumentType_Language where person_id=1 

這有道理嗎?我怎麼能把這個映射到Hibernate中呢?

回答

0

一種方法是從到LanguageMap。我在確切註釋上有點生疏,但這是一個開始:

public class Person { 

    @Id 
    public int id; 

    @OneToMany(targetEntity=Language.class) 
    @MapKeyClass(Integer.class) 
    @CollectionTable(name="Person_DocumentType_Language") 
    @MapKeyColumn(name="doc_id") 
    public Map<DocumentType,Language> docTypeLang; 
}