【发布时间】:2017-03-23 17:58:43
【问题描述】:
我有 2 个实体类。Employee 和 Account
@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;
}
我能够将数据保存到数据库,但是在检索员工行时,我得到“Method throw 'org.hibernate.LazyInitializationException' exception。无法评估 Employee.toString()”,并且对于员工对象(帐户)中的集合我看到“无法评估表达式方法抛出 org.hibernate.LazyInitializationException' 异常。”
我已经尝试过使用 FetchType.EAGER for OnetoMany 但是没有运气。不确定它是否是 lombok @Data(toString()) 引起的问题。
PS:我使用 JPA CrudRepository 来保存和检索数据库中的数据。
请帮忙。
【问题讨论】:
-
一个问题是您对 toString 有循环依赖关系,如果它试图通过打印检索到的对象来记录它们,这可能会导致问题。如果您在帐户上调用 toString,它将在其拥有的员工上调用 toString,该员工将在包含它的所有帐户上调用 toString,这将再次在自身上调用 toString,像这样循环直到它耗尽内存。另外,你能提供一个堆栈跟踪吗?
标签: hibernate jpa spring-boot lombok