2017-03-23 3 views
1

Ich habe eine 2-Einheit classes.Employee und Konto-Ausnahme, während Daten von JPA Lesen - 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; 
} 

Ich bin in der Lage Daten in der Datenbank zu speichern, aber beim Abrufen des Mitarbeiter Reihe bekomme ich " Die Methode hat die 'org.hibernate.LazyInitializationException'-Ausnahme ausgelöst. Employee.toString() kann nicht ausgewertet werden, und für die Auflistungen im Mitarbeiterobjekt (Konten) sehe ich "Kann den Ausdruck Methode ward org.hibernate.LazyInitializationException' auswerten "

Ich habe mit FetchType.EAGER für OnetoMany aber kein Glück versucht.Nicht sicher, ob es das lombok @Data (toString()) verursacht.

PS: Ich verwende JPA CrudRepository zum Speichern und Abrufen von Daten aus der DB.

bitte helfen.

+0

Ein Problem besteht darin, dass zyklische Abhängigkeiten für toString das Problem verursachen, wenn es versucht, abgerufene Objekte durch Drucken zu protokollieren. Wenn Sie toString für account aufrufen, wird toString von seinem besitzenden Mitarbeiter aufgerufen, der toString für alle Accounts aufruft, die ihn enthalten, der wiederum toString für sich selbst aufruft und so weiterläuft, bis kein Speicher mehr verfügbar ist. Können Sie auch einen Stack-Trace bereitstellen? – mnewton

Antwort

0

Sie müssen wahrscheinlich die folgende Anmerkung zu Employee hinzuzufügen:

@ToString(exclude="accounts") 

Auch ich glaube, Sie Basis, um die Gleichheit der beiden Entitäten hinzugefügt werden soll auf der Grundlage ihrer ID:

@EqualsAndHashCode(of="emp_id") 

Und etwas ähnlich wie Account

Offenlegung: Ich bin ein Lombok Entwickler.

+0

Kein Glück mit der oben vorgeschlagenen Änderung :(. –

Verwandte Themen