休眠LazyInitialization @OneToOne

时间:2018-12-10 16:28:22

标签: java hibernate spring-boot lazy-loading byte-code-enhancement

我迫切需要通过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一起使用。

谢谢!

0 个答案:

没有答案