当我们使用spring boot创建项目时,系统默认使用的是如下parent。
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.6.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent>
可能不同时期版本不同,而spring boot的一大优势就是starter依赖,比如我们使用jpa就可以直接引用:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency>
配置好数据库后,就可以使用jpa开发了,我们不用管版本的问题,但是当我们遇到OneToOne 共享主键的情况下,从表居然不能延时加载
经过测试发现就是jpa中的hibernate的版本问题,
jpa starter中使用的版本是:
<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>5.3.10.Final</version> <scope>compile</scope> <exclusions> <exclusion> <artifactId>jboss-transaction-api_1.2_spec</artifactId> <groupId>org.jboss.spec.javax.transaction</groupId> </exclusion> </exclusions> </dependency>
当我们使用较新版本时,问题得以解决:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> <exclusions> <!-- 排除自带的logback依赖 --> <exclusion> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>5.4.3.Final</version> </dependency>
主表配置如下:
@OneToOne(fetch = FetchType.LAZY) @MapsId() @JoinColumn(name = "id") private PersonDetail personDetail;
从表不用任何配置。