仅加载多对一关系的 ID

uks*_*ksz 4 java hibernate

我在使用 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;
}
Run Code Online (Sandbox Code Playgroud)

现在,每当我尝试执行:

List<OrderProduct> findByOrderId(@Param(value = "order") Long orderId);
Run Code Online (Sandbox Code Playgroud)

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

Dra*_*vic 5

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

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

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

@Column(name = "order_id", insertable = false, updatable = false)
private long orderId;
Run Code Online (Sandbox Code Playgroud)