2012-10-24 34 views
9

Tôi muốn làm một mối quan hệ một-nhiều giữa hai bảng bằng cách sử dụng một bảng tham gia.hibernate một đến nhiều bằng cách sử dụng một bảng tham gia, và chú thích ngủ đông

Đây là lý do tại sao tôi muốn sử dụng một bảng tham gia:

Cuối cùng, tôi muốn sử dụng chú thích Hibernate để thực hiện điều này.

Tôi đã tìm thấy một số ví dụ để thực hiện việc này bằng cách sử dụng ánh xạ xml nhưng không có gì có chú thích.

Tôi tin rằng đây sẽ là như thế nào các bảng cần phải được tạo ra

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`) 
); 

Trả lời

24

Đừng nhìn cho ví dụ. Đọc số 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 { 
    ... 
} 

Ngoài ra, lưu ý rằng đây là mặc định cho các liên kết một chiều. Vì vậy, bạn thậm chí không phải cung cấp chú thích @JoinTable nếu tên bảng và cột mặc định phù hợp với bạn.

+0

cảm ơn bạn JB Nizet. Tôi đã cập nhật câu hỏi của mình với những gì tôi tin rằng các bảng yêu cầu sẽ trông như thế nào. Đúng không? –

+0

cảm ơn vì đã chỉ dẫn tài liệu (phiên bản trang đơn có ích!). Tôi tìm tài liệu chính xác nhưng không thân thiện đó là lý do tại sao tôi luôn tìm kiếm các ví dụ khi bắt đầu làm việc trên các công nghệ mới. Đó là một trong những loại tốt đẹp nhưng bỏ qua phần tạo bảng quá http://www.dzone.com/tutorials/java/hibernate/hibernate-example/hibernate-mapping-one-to-many-using-annotations-1.html –

+0

Có vẻ đúng, ngoại trừ SERIAL_NUMBER phải là PRODUCT_ID để khớp với chú thích. –

Các vấn đề liên quan