从JPA读取数据时出现异常 - org.hibernate.LazyInitializationException

时间:2017-03-23 17:58:44

标签: hibernate jpa spring-boot lombok

我有2个实体类。员工和帐户

@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来保存和检索数据库中的数据。

请帮忙。

1 个答案:

答案 0 :(得分:1)

您可能需要将以下注释添加到Employee

@ToString(exclude="accounts")

另外,我认为你想根据他们的id添加两个实体的基础:

@EqualsAndHashCode(of="emp_id")

类似于Account

披露:我是一名lombok开发者。