org.springframework.dao.InvalidDataAccessApiUsageException: org.hibernate.loader.MultipleBagFetchException: невозможно одновременно получить несколько пакетов: [Order.items, OrderItem.options];
Выше - этоИсключение я столкнулся, когда я присоединяюсь к трем таблицам, как показано ниже
OrderItemOption.java
@Entity
public class OrderItemOption {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "item_option_id")
private Long id;
@Column(name = "item_id", nullable = false)
private Long itemId;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(
name = "item_id",
referencedColumnName = "item_id",
insertable = false,
updatable = false
)
private OrderItem orderItem;
}
OrderItem.java
@Entity
public class OrderItem {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "item_id")
private Long id;
@Column(name = "order_id", nullable = false)
private Long orderId;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(
name = "order_id",
referencedColumnName = "order_id",
insertable = false,
updatable = false,
nullable = false
)
private Order order;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "orderItem")
@OrderBy("item_option_id ASC")
private List<OrderItemOption> options;
}
Order.java
@Entity
public class Order {
@Id
@Column(name = "order_id", nullable = false)
private Long id;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "order")
@OrderBy("item_id ASC")
private List<OrderItem> items;
}
И вот мой код QueryDSL, чтобы присоединиться к нимв одно время.
final QOrder order = QOrder.order;
final QOrderItem item = QOrderItem.orderItem;
final QOrderItemOption option = QOrderItemOption.orderItemOption;
from(order)
.leftJoin(order.items, item).fetchJoin()
.leftJoin(item.options, option).fetchJoin()
.where(
order.id.eq(orderId)
.and(item.id.in(itemIds))
.and(option.id.in(optionIds))
)
.fetchOne())
Я пытаюсь получить объект Order, который содержит отфильтрованные отношения, чтобы я мог получить доступ к отфильтрованным дочерним элементам через объект заказа.и тип отношения должен быть List, а не Set.
, например, order.getItems (). get (0) .getOptions.get (0)
Как мне достичьэта цель?