我迫切需要通过join fetch
加载标记为lazy
的关系。
@ManyToOne(fetch=FetchType.LAZY)
@LazyToOne(LazyToOneOption.NO_PROXY)
@JoinColumn(name = "type_id")
private TypeEntity type;
由于性能问题,我们目前正在将所有急切加载的属性移到延迟加载。 (@OneToOne和@ManyToOne)
我关注了Vladmihalcea的文章(https://vladmihalcea.com/the-best-way-to-map-a-onetoone-relationship-with-jpa-and-hibernate/),并启用了字节码增强功能,以允许在@OneToOne属性上进行延迟加载。
它现在运行良好,并且当我选择它时我无需进一步的联接就可以检索我的实体,但是当我想热切地获取某个关系(通过left join fetch entity.relation
)时,它们不会被加载。我只能通过访问getter来加载它们,后者会触发一个新的SQL查询来获取它。
我希望将这些连接关系添加到我的实体中,以便以后甚至在事务外部访问它,而无需进行更多的数据库访问。
我激活了休眠日志记录,并且生成的查询看起来不错(我看到了我想热切获取的表上的联接,并且这些字段包含在主实体旁边的select语句中)。
有人知道为什么left join fetch entity.relation
在成功获取关系时未加载该关系吗?在交易之外,它抛出Unable to perform requested lazy initialization
我们将SpringBoot 1.5.1与Hibernate 5.0.11一起使用。
谢谢!