2012-10-24 17 views
9

Chcę zrobić relację jeden do wielu między dwiema tabelami przy użyciu tabeli sprzężenia.hibernacji jeden do wielu przy użyciu tabeli łączenia i hibernacji adnotacje

Dlatego chcę użyć tabeli dołączenia:

Wreszcie chcę użyć Hibernacja adnotacje do wykonywania tego.

Znalazłem kilka przykładów tego przy użyciu mapowania XML, ale nic z adnotacjami.

Wierzę, że to będzie jak trzeba tabele mają być utworzone

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

Odpowiedz

24

Nie patrz przykłady. Przeczytać 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 { 
    ... 
} 

Należy również pamiętać, że jest to ustawienie domyślne dla jednokierunkowych jeden-do-wielu stowarzyszeń. Nie musisz więc podawać adnotacji @JoinTable, jeśli odpowiada Ci domyślna nazwa tabeli i kolumny.

+0

dziękuję JB Nizet. Mam zaktualizowane moje pytanie z tym, w co moim zdaniem powinny wyglądać wymagane tabele. Czy to jest poprawne? –

+0

dziękuję za wskazanie dokumentacji (wersja jednej strony jest przydatna!). Uważam, że doktorzy są precyzyjni, ale nieprzyjaźni, dlatego zawsze szukam przykładów, gdy zaczynam pracować nad nowymi technikami. Ten był miły, ale pominął też tworzenie tabeli. Http://www.dzone.com/tutorials/java/hibernate/hibernate-example/hibernate-mapping-one-to-many-using-annotations-1.html –

+0

To prawda, oprócz numeru SERIAL_NUMBER należy podać PRODUCT_ID, aby pasowała do adnotacji. –

Powiązane problemy