9

Ich möchte eine Eins-zu-viele-Beziehung zwischen zwei Tabellen mithilfe einer Join-Tabelle. DieseHibernate von einem zu vielen mithilfe einer Join-Tabelle und Hibernate Annotationen

ist, warum ich eine Join-Tabelle verwenden möchten:

Schließlich möchte ich Hibernate Annotationen verwenden auszuführen.

Ich habe einige Beispiele gefunden, die dies mit XML-Mapping tun, aber nichts mit Anmerkungen.

ich glaube, das wäre, wie die Tabellen

erstellt werden müssen
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`) 
); 

Antwort

24

Schauen Sie nicht für Beispiele. Lesen Sie die 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 { 
    ... 
} 

Beachten Sie auch, dass dies der Standard für unidirektional ist eine Eins-zu-viele Assoziationen. Sie müssen also nicht einmal die @JoinTable Annotation angeben, wenn Ihnen die Standardtabellen- und Spaltennamen zusagen.

+0

danke JB Nizet. Ich habe meine Frage mit dem aktualisiert, von dem ich glaube, dass die erforderlichen Tabellen aussehen würden. Ist das korrekt? –

+0

danke für das Zeigen der Dokumentation (die einseitige Version ist praktisch!). Ich finde Dokumente präzise, ​​aber unfreundlich, deshalb suche ich immer nach Beispielen, wenn ich anfange, an neuen Technikern zu arbeiten. Das war irgendwie nett, aber verpasste die Erstellung der Tabelle zu http://www.dzone.com/tutorials/java/hibernate/hibernate-example/hibernate-mapping-one-to-many-using-annotations-1.html –

+0

Das sieht richtig aus, außer SERIAL_NUMBER sollte PRODUCT_ID sein, um die Anmerkungen zu entsprechen. –