Поскольку у связи есть собственное поле count, order_details лучше отобразить отдельной сущностью. При уникальной паре order_id/product_id используйте EmbeddedId и две связи с MapsId.
Отображение таблицы order_details в Hibernate
Поскольку у связи есть собственное поле count, order_details лучше отобразить отдельной сущностью. При уникальной паре order_id/product_id используйте EmbeddedId и две связи с MapsId.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
В базе данных присутствует таблица order_details(order_id, product_id, count). Требуется реализовать её отображение в Hibernate, используя либо отдельную сущность, либо составной ключ.
Структура базы состоит из трёх таблиц:
User(id, name, sex, birthday)
Product(id, maker, model, type)
Order(user_id, product_id, date, count, code, price, total_sum
Ответ
Поскольку у связи есть собственное поле count, order_details лучше отобразить отдельной сущностью. При уникальной паре order_id/product_id используйте EmbeddedId и две связи с MapsId.
Схематичная разметка:
@Entity
@Table(name = "order_details")
class OrderDetail {
@EmbeddedId
private OrderDetailId id;
@MapsId("orderId")
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "order_id")
private Order order;
@MapsId("productId")
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "product_id")
private Product product;
@Column(name = "count")
private int count;
}
OrderDetailId — Embeddable с Long orderId/productId, корректными equals/hashCode, no-arg конструктором и Serializable для совместимости. Схема Order в условии неполная: нужен первичный ключ, на который ссылается order_id. Если один товар может иметь несколько отдельных позиций заказа, вместо пары требуется собственный ID позиции. Обычный ManyToMany потерял бы количество.
Источник: jakarta.ee.