Гибернация один ко многим с помощью таблицы соединений и аннотации гибернации
Я хочу сделать отношения один-ко-многим между двумя таблицами, используя таблицу соединений.
Вот почему я хочу использовать таблицу соединений:
- Гибернация однонаправленная связь один ко многим - почему таблица соединений лучше?
- Почему рекомендуется избегать однонаправленной связи один-ко-многим на внешнем ключе?
Наконец, я хочу использовать аннотации 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
аннотация, если имена таблиц и столбцов по умолчанию вам подходят.