由于性能问题,我已将大部分休眠关系映射作为fetch = fetchType.LAZY
以避免不必要的对数据库的查询。 如何显式加载休眠实体的LAZY提取成员
....
private ConsumerEntity consumerEntity;
@ManyToOne(fetchType.LAZY)
@JoinColumn(name="orderId", insertable=false, updateable=false)
public ConsumerEntity getConsumerEntity(){
return this.consumerEntity;
}
....
以上示出的关系为OrderEntity
和ConsumerEntity
映射设置。
每次调用者执行查询时,我都会打开一个会话,处理查询并返回结果,然后关闭会话。
Public OrderEntity getOrderEntity(orderQueryParam){
Sting hql = buildHqlStrFromParam(orderQueryParam);
return (OrderEntity)this.getEntityByHql(hql); // in the method just 1. open a session; 2. retrieve entity 3. close the session;
}
但有时我知道来电者可能需要的相关记录也是如此。就像,如果他询问特定的订单记录,我可能也想给他消费者实体,所以他可以做一个点事情来获取他需要的信息,而不必处理第二个查询或得到一个延迟加载的异常,因为会话已经关闭:
...
OrderEntity order = TradeService.getOrderEntity(orderQueryParam);
ConsumerEntity consumer = order.getConsumerEntity();
....
但情况是非常罕见的,这样我不想改变fetchType
到EAGER
。
如何做到这一点?我的意思是我想要选择是否加载配置为fetchType.LAZY
的ConsumerEntity
。
您可以推断这是一个共同的要求,因此必须存在多个重复问题。那么你发现了哪些类似的问题,为什么他们不回答你的问题?因为我在“相关”问题中已经看到了一些赢家。 – Gimby