我在使用 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?
你已经在一个很好的轨道上,因为关联是懒惰的,所以 Hibernate 将Order在该order领域做一个代理。
但是,只要您调用它的任何方法,代理实例就会被初始化。看看这个问题,当您只需要 id (在您的情况下指向关联实体的外键)时如何禁用代理初始化。当然,请确保不要在代理上调用其他方法。
或者,您可以显式映射外键列并使用它而不是访问关联的实体(它既不能插入也不能更新,因为该列已经映射到关联中):
@Column(name = "order_id", insertable = false, updatable = false)
private long orderId;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3600 次 |
| 最近记录: |