Hibernate:@ManyToOne(fetch = FetchType.LAZY)不适用于非主键引用列

Tho*_*Lee 18 java hibernate jpa lazy-loading one-to-one

我有2张桌子:Order [OrderId(PK), OrderShipmentCode, ...]Shipment[ShipmentId(PK), ShipmentCode, ...].

Order课堂上,我声明shipment了如下字段:

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "OrderShipmentCode", referencedColumnName = "ShipmentCode", insertable = false, updatable = false, nullable = false)
private Shipment shipment;
Run Code Online (Sandbox Code Playgroud)

当我得到列表时Order,Shipment也会加载(我看到很多单独的SELECT查询).但是我希望它Shipment是懒惰的,而不是与它一起提取Order.

对于其他表,如果引用的列是主键,则结果与预期一致(使用延迟加载).在我的情况下,ShipmentCode不是Shipment表的主键,并且Hibernate不使用延迟加载.

你能告诉我如何实现这个目标吗?

编辑: 查询代码如下:

Criteria criteria = HibernateUtil.getSessionFactory().getCurrentSession().createCriteria(Order.class);
List result = criteria.list();
Run Code Online (Sandbox Code Playgroud)

SQL查询是:1 Order表的SELECT语句和一堆SELECT语句Shipment

Vla*_*cea 2

Thd 问题是由HHH-13024 问题引起的。

本着 OSS 的真正精神,您可能想要调查问题并发送带有修复建议的 Pull 请求。这是解决问题的最快方法。

  • 谢谢。我已经尝试过你的解决方案,但结果是一样的 (5认同)
  • 我还用您更新的答案进行了测试,但结果仍然相同。 (4认同)