Employee
エンティティのリストを取得しようとすると、次のエラーが発生します。
org.hibernate.loader.MultipleBagFetchException: cannot simultaneously fetch
multiple bags
私のEmployee
エンティティクラスには、異なるオブジェクトの2つのリストがあります。問題があると思います。
@ManyToMany
@JoinTable(name = "employee_project",
joinColumns = {@JoinColumn(name = "employee_id", referencedColumnName = "employee_id")},
inverseJoinColumns = {@JoinColumn(name = "project_id", referencedColumnName = "project_id")})
protected List<Project> projects;
@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name = "employee_id")
protected List<EmployeeTheme> themes;
私のエンティティProject
には、現時点ではEmployee
オブジェクトのリストがありません。だが
public class EmployeeTheme implements Serializable {
@EmbeddedId
private EmployeeTheme PK id;
@ManyToOne
@JoinColumn(name = "employee_id", nullable = false, insertable = false, updatable = false)
protected Employee employee;
}
そして、これは複合キーの私のクラスです:
@Embeddable
public class EmployeeThemePK implements Serializable {
@Column(name = "employee_id")
protected Long employeeId;
@Column(name = "theme")
protected String theme;
}
これらの関係を適切に構成するにはどうすればよいですか?
編集
テーマとプロジェクトのリストをセットに切り替えました。そして、JSONテーマから除外しましたが、別の例外が発生しています。criteria.setFetchMode("projects", FetchMode.JOIN);
DAOクラスのメソッドにも追加しました。
failed to lazily initialize a collection of role: com.package.Employee.projects,
no session or session was closed
org.hibernate.LazyInitializationException: failed to lazily initialize a
collection of role: com.package.Employee.projects, no session or session
was closed
Exception caught during request processing: flexjson.JSONException: Error
trying to deepSerialize
flexjson.JSONException: Error trying to deepSerialize