我有一个2实体classes.Employee和账户异常而从JPA读取数据 - org.hibernate.LazyInitializationException
@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity
@DynamicUpdate
@DynamicInsert
@Table(name = "employee", schema = "org")
public class Employee {
@Id
@Column(name = "emp_id")
private String empId;
@Column(name = "emp_name")
private String empName;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "employee")
private Set<Account> accounts;
}
@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity
@DynamicUpdate
@DynamicInsert
@Table(name = "account", schema = "org")
public class Account {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "acct_id")
private Integer accountId;
@Column(name = "acct_nbr")
private String accountNumber;
@ManyToOne
@JoinColumn(name = "emp_id", nullable = false)
private Employee employee;
}
我能够将数据保存到数据库,但在员工行的检索我得到“ 方法抛出'org.hibernate.LazyInitializationException'异常。无法评估Employee.toString()“和员工对象(帐户)中的集合我看到”无法评估表达式方法抛出org.hibernate.LazyInitializationException异常。“
我尝试过使用FetchType.EAGER for OnetoMany,但没有运气。不知道是否它的lombok @Data(toString())导致问题。
PS:我使用JPA CrudRepository来保存和检索数据库中的数据。
请大家帮忙。
一个问题是你有toString的循环依赖关系,如果它试图通过打印它们来记录检索到的对象,可能会导致问题。如果你在账户中调用toString,它会在它自己的员工上调用toString,它将在包含它的所有账户上调用toString,这些账户将再次调用toString,循环这样循环直到内存耗尽。另外,你可以提供堆栈跟踪吗? – mnewton