Создайте Customer и OrderEntity с отношением one-to-many/many-to-one. Заказы клиента загружайте LAZY, а для сценария «клиент с заказами» используйте отдельный fetch join или entity graph.
Hibernate: как спроектировать связь между клиентами и их заказами
Создайте Customer и OrderEntity с отношением one-to-many/many-to-one. Заказы клиента загружайте LAZY, а для сценария «клиент с заказами» используйте отдельный fetch join или entity graph.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Имеются две таблицы — customer (клиенты) и order (заказы). В большинстве случаев (около 80%) требуется получить только данные о клиентах, а в оставшихся 20% — одновременно клиентские данные и связанные с ними заказы. Необходимо реализовать эту схему в Hibernate, определив какие сущности создать, какие аннотации применить и какой тип загрузки (eager/lazy) использовать.
Ответ
Создайте Customer и OrderEntity с отношением one-to-many/many-to-one. Заказы клиента загружайте LAZY, а для сценария «клиент с заказами» используйте отдельный fetch join или entity graph.
У Customer: @OneToMany(mappedBy="customer", fetch=LAZY). У OrderEntity: @ManyToOne(fetch=LAZY) и @JoinColumn(name="customer_id"). Обе сущности имеют @Entity и @Id. Для чтения вместе подходит JPQL: select distinct c from Customer c left join fetch c.orders where c.id = :id. Данные преобразуют в DTO внутри транзакции. Имя SQL-таблицы order требует экранирования либо переименования; каскадное удаление нельзя включать без бизнес-требования.
Источник: jakarta.ee.