当我试图让我的Employee
实体我得到这个错误的清单:休眠:获取对象的集合,而不多袋
org.hibernate.loader.MultipleBagFetchException: cannot simultaneously fetch
multiple bags
我Employee
实体类有不同对象的两个列表。我想有问题。
@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主题,现在我又遇到了另一个异常。我还在我的DAO类中添加了criteria.setFetchMode("projects", FetchMode.JOIN);
方法。
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
我们怎么能强制Hibernate feach时,你所描述的数据? –
基本上我需要主题和项目给员工,因为我正在用员工列表创建JSON。每个员工的主题和项目都应该存在于我的JSON中。我如何从第二条建议中执行操作?首先我只需要使用Set? – woyaru
只要按照我的建议做:执行第一个查询,返回员工的项目。执行相同的查询,但是用其主题提取员工。 seond查询将填充已在会话中缓存的用户的主题。或者做一个笛卡尔产品,但是至少有一个列表必须转换成一个Set。 –