【发布时间】:2015-03-07 10:22:05
【问题描述】:
我有 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;
当我得到Order 的列表时,Shipment 也被加载(我看到了许多单独的 SELECT 查询)。但我希望 Shipment 被延迟加载,而不是与 Order 一起获取。
对于其他表,如果引用的列是主键,则结果与预期一致(使用延迟加载)。在我的例子中,ShipmentCode 不是Shipment 表的主键,Hibernate 不使用延迟加载。
你能告诉我如何实现这个目标吗?
编辑: 查询代码如下:
Criteria criteria = HibernateUtil.getSessionFactory().getCurrentSession().createCriteria(Order.class);
List result = criteria.list();
SQL 查询是:Order 表的 1 个 SELECT 语句和Shipment 的一堆 SELECT 语句
【问题讨论】:
-
您能显示触发条件或查询的代码吗?
-
您可以尝试使用原生查询,例如 select * from order where 条件。
标签: java hibernate jpa lazy-loading one-to-one