2012-10-24 195 views
9

我想要使用連接表在兩個表之間執行一對多的關係。休眠一對多使用連接表和休眠註釋

這就是爲什麼我想要使用一個連接表:

最後,我想用Hibernate的註解來執行此操作。

我發現了一些使用xml映射但沒有註釋的例子。

我相信這會是怎樣的表需要創建

CREATE TABLE `PRODUCT` (
    `PRODUCT_ID`  BIGINT  PRIMARY KEY AUTO_INCREMENT 
); 

CREATE TABLE `PARTS` (
    `PART_ID`   BIGINT  PRIMARY KEY AUTO_INCREMENT 
); 

-- USER_IMAGE_ID must be unique if we want a one-to-many relationship between PRODUCTS & PARTS tables 
CREATE TABLE `USER_DETAILS_IMAGE` (
    `PRODUCT_ID`  BIGINT, 
    `PART_ID`   BIGINT UNIQUE, 
    CONSTRAINT `FK_PRODUCT_ID` FOREIGN KEY (`PRODUCT_ID`) REFERENCES `PRODUCT`(`PRODUCT_ID`), 
    CONSTRAINT `FK_PART_ID`  FOREIGN KEY (`PART_ID`)  REFERENCES `PARTS`(`PART_ID`) 
); 

回答

24

不要找例子。閱讀official documentation

@Entity 
public class Product { 

    private String serialNumber; 
    private Set<Part> parts = new HashSet<Part>(); 

    @Id 
    public String getSerialNumber() { return serialNumber; } 
    void setSerialNumber(String sn) { serialNumber = sn; } 

    @OneToMany 
    @JoinTable(
      name="PRODUCT_PARTS", 
      joinColumns = @JoinColumn(name="PRODUCT_ID"), 
      inverseJoinColumns = @JoinColumn(name="PART_ID") 
    ) 
    public Set<Part> getParts() { return parts; } 
    void setParts(Set parts) { this.parts = parts; } 
} 


@Entity 
public class Part { 
    ... 
} 

另外,請注意,這是對單向一對多關聯的默認。因此,如果默認表格和列名稱適合您,則甚至不必提供@JoinTable註釋。

+0

謝謝JB Nizet。我更新了我的問題,我相信所需的表格看起來像。那是對的嗎? –

+0

感謝您指出文檔(單頁版本非常方便!)。我確實發現了準確但不友好的文檔,這就是爲什麼我在開始使用新技術時總是尋找示例的原因。這是一種很好,但錯過了表格創建部分http://www.dzone.com/tutorials/java/hibernate/hibernate-example/hibernate-mapping-one-to-many-using-annotations-1.html –

+0

看起來不錯,除了SERIAL_NUMBER應該是PRODUCT_ID以匹配註釋。 –