我是Hibernate的新手,我正在使用 JSF2 + Hibernate 4.3 开展我的第一个项目。我认为@ManyToMany
关系存在问题。
相关表格:
- EMPLOYEE (id, first_name, last_name,...)
- TASK (id, title, description,...)
- EMPLOYEE_TASK (id, employee_id, task_id)
EMPLOYEE_TASK
表的内容:
ID | EMPLOYEE_ID | TASK_ID
--------------------------------
1 | 9 | 1
2 | 9 | 2
3 | 9 | 3
4 | 7 | 1
5 | 8 | 2
6 | 6 | 1
相关代码部分:
Employee.java
@ManyToMany(fetch = FetchType.EAGER, mappedBy = "workers")
private List<Task> myWorkingTasks;
Task.java
@ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinTable(name = "employee_task", catalog = "employeemanager", joinColumns = {
@JoinColumn(name = "task_id", nullable = false, updatable = true)},
inverseJoinColumns = {
@JoinColumn(name = "employee_id",
nullable = false, updatable = true)})
private List<Employee> workers;
TaskOverview.java
@ManagedBean
@RequestScoped
public class TaskOverview {
private int taskId;
private Task task;
public void init() {
if (taskId > 0) {
task = TaskDAO.findById(taskId);
}
}
public Task getTask() {
return task;
}
}
taskView.xhtml
<ui:repeat value="#{taskOverview.task.workers}" var="worker">
<h:outputText value="#{worker.firstName} #{worker.lastName}"/>
</ui:repeat>
因此,当我打开页面 taskView.xhtml?taskId = 3 时,我应该只看到员工列表中的员工#3。但由于某种原因,他的名字被打印两次。如果我打开 taskId = 2 的同一页面,这两名员工将被打印四次。对于 taskId = 1 ,三名员工打印四次。
我的应用程序中的其他内容(@ OneToMany,@ ManyToOne和@OneToOne)运行正常。
我感谢你们提供的任何帮助:)
编辑(和解决方案): 问题肯定在Hibernate部分(实际上,程序员是问题:))。我尝试从头开始重写所有内容,现在它按预期工作。
答案 0 :(得分:0)
问题肯定在Hibernate部分(实际上,程序员是问题:))。我尝试从头开始重写所有内容,现在它按预期工作。