9

Voglio fare una relazione uno-a-molti tra due tabelle utilizzando una tabella di join.ibernare uno a molti usando una tabella di join e le annotazioni di ibernazione

è per questo che voglio usare una tabella di join:

Infine, voglio usare le annotazioni Hibernate per eseguire questa.

Ho trovato alcuni esempi per farlo usando la mappatura xml ma niente con le annotazioni.

Credo che questo sarebbe stato come le tabelle devono essere create

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

risposta

24

Non cercare esempi. Leggi la 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 { 
    ... 
} 

Inoltre, notare che questa è l'impostazione predefinita per le associazioni unidirezionali uno-a-molti. Quindi non è nemmeno necessario fornire l'annotazione @JoinTable se i nomi di tabella e colonna predefiniti sono adatti.

+0

grazie JB Nizet. Ho aggiornato la mia domanda con quello in cui credo sembrerebbero le tabelle richieste. È corretto? –

+0

grazie per aver indirizzato la documentazione (la versione a pagina singola è a portata di mano!). Trovo i documenti precisi ma scortesi è per questo che cerco sempre esempi quando si inizia a lavorare su nuove tecnologie. Quella era carina, ma mancava anche la parte di creazione del tavolo http://www.dzone.com/tutorials/java/hibernate/hibernate-example/hibernate-mapping-one-to-many-using-annotations-1.html –

+0

Sembra giusto, tranne SERIAL_NUMBER dovrebbe essere PRODUCT_ID per abbinare le annotazioni. –

Problemi correlati