hibernate one to many using a join table, and hibernate annotations

僤鯓⒐⒋嵵緔 提交于 2019-12-04 11:11:53

问题


I want do a one-to-many relationship between two tables using a join table.

This is why I want to use a join table:

  • Hibernate unidirectional one to many association - why is a join table better?
  • Why is it recommended to avoid unidirectional one-to-many association on a foreign key?

Finally, I want to use Hibernate annotations to perform this.

I found some examples to do this using xml mapping but nothing with annotations.

I believe this would be how the tables need to be created

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

回答1:


Don't look for examples. Read the 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 {
   ...
}

Also, note that this is the default for unidirectional one-to-many associations. So you don't even have to provide the @JoinTable annotation if the default table and column names suit you.



来源:https://stackoverflow.com/questions/13047483/hibernate-one-to-many-using-a-join-table-and-hibernate-annotations

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!