gpt4 book ai didi

java - 仅加载多对一关系的 ID

转载 作者:行者123 更新时间:2023-12-01 13:03:26 25 4
gpt4 key购买 nike

我在使用 hibernate 时遇到了性能问题。我有以下几点:

@Data
@Entity
@Table(name="\"Order_product\"")
public class OrderProduct {
@Id
@SequenceGenerator(name="Order_product_id_seq",
sequenceName="Order_product_id_seq",
allocationSize=1)
@GeneratedValue(strategy = GenerationType.SEQUENCE,
generator="Order_product_id_seq")
private long id;
@ManyToOne
@NotNull
private Product product;
@ManyToOne
@NotNull
private ProductPrice price;
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@NotNull
private Order order;
}

现在,每当我尝试执行:
List<OrderProduct> findByOrderId(@Param(value = "order") Long orderId);

Hibernate 将为每个 OrderProduct 加载整个 Order。如何禁用此功能,以便仅加载订单 ID?

最佳答案

你已经在一个很好的轨道上,因为关联是懒惰的,所以 Hibernate 会做一个 Order 的代理。在 order field 。

但是,只要您调用它的任何方法,代理实例就会被初始化。看看this question关于如何在您只需要 id (在您的情况下指向关联实体的外键)时禁用代理初始化。当然,请确保不要在代理上调用其他方法。

或者,您可以显式映射外键列并使用它而不是访问关联的实体(它既不能插入也不能更新,因为该列已经映射到关联中):

@Column(name = "order_id", insertable = false, updatable = false)
private long orderId;

关于java - 仅加载多对一关系的 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39917519/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com