Гибернация один ко многим с помощью таблицы соединений и аннотации гибернации

Я хочу сделать отношения один-ко-многим между двумя таблицами, используя таблицу соединений.

Вот почему я хочу использовать таблицу соединений:

Наконец, я хочу использовать аннотации Hibernate для этого.

Я нашел несколько примеров, чтобы сделать это с помощью сопоставления XML, но ничего с аннотациями.

Я считаю, что это будет, как таблицы должны быть созданы

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 ответ

Решение

Не ищите примеров. Прочитайте официальную документацию:

@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 {
   ...
}

Также обратите внимание, что это значение по умолчанию для однонаправленных связей "один ко многим". Так что вам даже не нужно предоставлять @JoinTable аннотация, если имена таблиц и столбцов по умолчанию вам подходят.

Другие вопросы по тегам