为了账号安全,请及时绑定邮箱和手机立即绑定

休眠 OneToONe 延迟获取

休眠 OneToONe 延迟获取

森栏 2021-09-12 16:05:53
我知道这个问题被问了好几次,但我找不到关于这个主题的明确例子和答案(我也尝试了其他可能的解决方案)。我正在使用Spring JPAandHibernate并尝试对 OneToONe 关系进行延迟获取。我有 2 个简单的实体类,一个 Repository 类并使用 h2 数据库来延迟加载实体。我尝试构建时间字节码检测来实现这一点,这些是我的课程。A级@Entitypublic class A {    private String name;    @Id    @GeneratedValue(strategy = GenerationType.AUTO)    private Long id;    @OneToOne(optional = false, fetch = FetchType.LAZY, mappedBy = "a")    @LazyToOne(LazyToOneOption.NO_PROXY)    private B b;}B级@Entitypublic class B {    @Id    @GeneratedValue(strategy = GenerationType.AUTO)    private Long id;    @OneToOne(fetch = FetchType.LAZY, optional = false)    @JoinColumn(name = "A_ID")    private A a;}存储库public interface ARepository extends JpaRepository<A, Long> {    A findByName(String name);}pom.xml字节码增强器<plugin>    <groupId>org.hibernate.orm.tooling</groupId>    <artifactId>hibernate-enhance-maven-plugin</artifactId>    <version>${hibernate.version}</version>    <executions>        <execution>            <configuration>                <failOnError>true</failOnError>                <enableLazyInitialization>true</enableLazyInitialization>            </configuration>            <goals>                <goal>enhance</goal>            </goals>        </execution>    </executions></plugin>最后是 h2 数据库的initdata.sqlinsert into a (name, id) values ('a', 1);insert into b (a_id, id) values (1, 1);当我findByName()在测试类中调用方法时,它仍然对A和执行 2 个查询B。我怎样才能延迟获取B类?提前致谢。
查看完整描述

2 回答

?
叮当猫咪

TA贡献1776条经验 获得超12个赞

教程中对您的问题有答案

那是因为 Hibernate 需要知道它是否应该使用 null 或代理类初始化手稿属性。它只能通过查询手稿表来找到引用此 Book 实体的记录。Hibernate 团队决定,如果他们无论如何都必须查询手稿表,最好急切地获取关联的实体。


查看完整回答
反对 回复 2021-09-12
  • 2 回答
  • 0 关注
  • 132 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信