java - OneToOne 和 OneToMany 的延迟获取不起作用
问题描述
我有 3 个实体 Person、Employee、PeopleEmail:
@Entity
@Table(name = "PERSON")
public class Person
{
private String id;
private String lastName;
private String middleName;
private String firstName;
private Employee employee;
private Set<PeopleEmail> peopleEmail;
@OneToMany(fetch = FetchType.LAZY, cascade = {CascadeType.ALL})
@LazyToOne(value = LazyToOneOption.NO_PROXY)
@JoinColumns({
@JoinColumn(name = "ID", referencedColumnName = "ID")
})
public Set<PeopleEmail> getPeopleEmail() {
return peopleEmail;
}
public void setPeopleEmail(Set<PeopleEmail> peopleEmail) {
this.peopleEmail = peopleEmail;
}
@OneToOne(cascade=CascadeType.ALL, fetch = FetchType.LAZY)
@JoinColumn(name = "ID", referencedColumnName = "EMPLOYEE_ID")
@LazyToOne(value = LazyToOneOption.NO_PROXY)
@Basic(fetch = FetchType.LAZY)
public Employee getEmployee() {
return employee;
}
public void setEmployee (Employee employee) {
this.employee = employee;
}
...
}
-
@Entity
@Table(name = "EMPLOYEE")
public class Employee {
private String employeeId;
private String spouseFirst;
private String spouseLast;
private String supervisorName;
@Id
@Column(name = "EMPLOYEE_ID", nullable = false, length = 10)
public String getEmployeeId() {
return employeeId;
}
public void setEmployeeId(String employeeId) {
this.employeeId = employeeId;
}
....
}
-
@Entity
@Table(name = "PEOPLE_EMAIL")
public class PeopleEmail
{
private String personEmailTypes;
private String personEmailAddresses;
private String personPreferredEmail;
private PeopleEmailPK peopleEmailPK;
private Long pos;
@EmbeddedId
public PeopleEmailPK getId()
{
return peopleEmailPK;
}
public void setId(PeopleEmailPK peopleEmailPK)
{
this.peopleEmailPK = peopleEmailPK;
}
我正在使用的数据库无法更改并且非常不规范。因此 PeopleEmailPK 主键(如果您需要查看此类,我很乐意提供)
我也将此添加到我的 pom.xml 文件中:
<plugin>
<groupId>org.hibernate.orm.tooling</groupId>
<artifactId>hibernate-enhance-maven-plugin</artifactId>
<version>5.0.12.Final</version>
<executions>
<execution>
<configuration>
<failOnError>true</failOnError>
<enableLazyInitialization>true</enableLazyInitialization>
<enableDirtyTracking>true</enableDirtyTracking>
<enableAssociationManagement>true</enableAssociationManagement>
<enableExtendedEnhancement>false</enableExtendedEnhancement>
</configuration>
<goals>
<goal>enhance</goal>
</goals>
</execution>
</executions>
</plugin>
问题是无论我做什么,我都无法让 Employee 和 PeopleEmail 延迟加载。当我调用与 Person 相关的任何内容时,它会运行 3 个查询。
为了它的价值,我在 Spring Boot 项目中使用 Hibernate 5.0.12
解决方案
推荐阅读
- pyspark - Spark SQL specify encoding while saving dataframe as table
- python - How do I assign values to an array depending on condition (MATLAB→Python translation)
- javascript - How do I make 2 checkboxes, that if for example one is checked and then you try to check the other it cancel the first one?
- variables - Create Varilable as Boolean in RDLC report to represent if dollar sign should be printed or not
- flutter - ICE Connection failed for webrtc in flutter
- python - kubernetes.client.rest.ApiException:(401)原因:未经授权;创建/删除 GKE pod 的 IAM
- java - JAVA Runnable .JAR File incomplete execution. Eclipse IDE Runs to completion
- python - 空查询集的 Django REST 框架序列化程序数据
- r - 与 mable 分开报告模型
- python - How to drop rows of a pyspark dataframe if they're in another dataframe based on the values from two columns?