【发布时间】:2020-11-02 09:31:31
【问题描述】:
在我的 Spring Boot 应用程序中,我使用的是休眠。我的多对一关系如下:-
@Entity
@Table(name = "STUDENT")
@JsonIdentityInfo(
generator = ObjectIdGenerators.PropertyGenerator.class,
property = "id")
public class Student {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column
private String name;
@Column
private int mobile;
@ManyToOne( fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinColumn(name = "DEPT_ID", nullable = false)
private Department department;
public Long getId() {
return id;
}
public void setId(Long id){
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getMobile() {
return mobile;
}
public void setMobile(int mobile) {
this.mobile = mobile;
}
public Department getDepartment() {
return department;
}
public void setDepartment(Department department) {
this.department = department;
}
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", mobile=" + mobile +
", department=" + department +
'}';
}
}
如:-
@Entity
@Table(name = "DEPARTMENT")
@JsonIdentityInfo(
generator = ObjectIdGenerators.PropertyGenerator.class,
property = "id")
public class Department {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column
private String name;
@OneToMany(mappedBy = "department", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
private List<Student> studentList=new ArrayList<Student>();
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<Student> getStudentList() {
return studentList;
}
public void setStudentList(List<Student> studentList) {
this.studentList = studentList;
}
}
对于 Department 的 fetch = FetchType.LAZY 和 fetch = FetchType.EAGER 都可以正常工作。
为了更好地理解,我将 Student 的 @ManyToOne(fetch = FetchType.EAGER) 切换为 @ManyToOne(fetch = FetchType.LAZY)。当 FetchType.LAZY:-
“类型定义错误:[简单类型,类 org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor];嵌套异常是 com.fasterxml.jackson.databind.exc.InvalidDefinitionException:找不到类 org.hibernate 的序列化程序。 proxy.pojo.bytebuddy.ByteBuddyInterceptor 并且没有发现创建 BeanSerializer 的属性(为避免异常,禁用 SerializationFeature.FAIL_ON_EMPTY_BEANS)(通过参考链:java.util.ArrayList[0]->com.myjavablog.model.Student["department" ]->com.myjavablog.model.Department$HibernateProxy$w9HG3Rv0["hibernateLazyInitializer"])"
为什么会这样?为什么我不能为学生做懒惰的取类型?提前致谢!
【问题讨论】:
标签: java spring-boot hibernate