教义:延迟加载属性

Posted

技术标签:

【中文标题】教义:延迟加载属性【英文标题】:Doctrine : Lazy loading properties 【发布时间】:2010-10-22 17:34:24 【问题描述】:

看起来当我忘记将 leftJoin 放在查询中时,Doctrine 会在我选择它们后延迟加载关系。即,如果我这样做:

$property = PropertyTable::getInstance()->createQuery('o')
  ->leftJoin('o.Features f')
  ->execute() ;

我仍然可以访问 $property->Attraction ,即使我没有在此查询中加载它们。所以我猜 Doctrine 是通过调用另一个“SELECT”在内部完成的。有没有办法通过抛出一些异常来防止这种自动加载?这将帮助我创建更好更快的查询。

【问题讨论】:

【参考方案1】:

你看过它产生的实际 sql 吗?

试试->getSql()。当您尝试访问相关字段时,它可能正在执行另一个查询。

如果您想避免这种情况,请不要访问相关字段!

【讨论】:

是的,我试过了,不,它不会加载景点。但我可以通过 $property->Attraction 访问它们。我希望抛出一些异常,这样我在编写查询时就不会出错。当我制作非常大的程序时,很容易跳过类似的东西。 我相信你可以访问它们,因为它会触发一个新的查询,因此它是预期的行为。我认为这里的解决方案不是换机器,而是更注意你如何使用机器。 是的,但这个想法是为了防止自动获取。大程序的快速开发很容易跳过一些join。

以上是关于教义:延迟加载属性的主要内容,如果未能解决你的问题,请参考以下文章

hibernate 延迟加载

MyBatis延迟加载和缓存

MyBatis延迟加载和缓存

JavaWeb系列——Hibernate——延迟加载(转)

延迟加载实体,正在加载引用但实体属性不是

关于extra加强延迟加载