org.hibernate.loader.MultipleBagFetchException: cannot simultaneously fetch multiple bags
MultipleBagFetchExceptionがHibernateによってスローされる理由は、重複が発生する可能性があり、Hibernate用語でBagと呼ばれる順序付けられていないListが重複を削除することを想定していないため。
@Entity
@Table(name = "app_user")
public class User implements Serializable {
@OneToMany(fetch = FetchType.LAZY, mappedBy="user", cascade = CascadeType.ALL)
private List<UserNovelInfo> userNovelInfos = new ArrayList<>();
@Entity
@Table(name = "user_novel_info")
public class UserNovelInfo extends BaseObject implements Serializable {
/** ユーザー */
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "username")
private User user;
Listを型に使用すると内部的には大体Bagが使用される。
重複が発生する可能性を除去出来ないのであれば、Setを使用するように変更することで例外は発生しなくなる。
@OneToMany(fetch = FetchType.LAZY, mappedBy="user", cascade = CascadeType.ALL)
private Set<UserNovelInfo> userNovelInfos = new HashSet<>();