我正在使用Spring Boot 2.7.5和Hibernate 5.6.12.Final,并通过hibernate-enhance-maven-plugin
在构建时应用字节码增强。它非常好用,可以防止急切地获取@OneToOne
关系,如此处所述https://vladmihalcea.com/hibernate-lazytoone-annotation/。
然而,我发现所有的懒惰关系都不再使用代理,而是在我使用getter(已经在构建时由maven插件进行了仪器化)时从数据库中获取。基本上,我想做的是仍然使用带有字节码增强的代理。类似的东西在运行时是可用的https://in.relation.to/2019/07/30/bytecode-proxy/,但我找不到一种在构建时实现它的方法。
简单介绍一下,我需要惰性加载属性的代理,因为这样可以让我根据代理是否被初始化,在实体-> dto映射器(使用Mapstruct)中应用自定义逻辑。有些情况下,如果Hibernate会话可用(并防止LazyInitializationException
),必须手动触发初始化。
非常感谢您的任何建议!
lazy="proxy|no-proxy|false"
。 - muhammed ozbilicispring.jpa.hibernate.bytecode.allow_enhancement_as_proxy: true
,但它没有生效。 - Blockostorg.hibernate.Hibernate#isPropertyInitialized
方法吗? - Andrey B. PanfilovLazyInitializationException
。映射器是由Mapstruct在构建时生成的,因此我无法完全控制它们(而且我也不想在Mapstruct方面添加太多逻辑)。 - Blockost