Hibernate和JSF - 乘以行

时间:2016-09-30 20:54:11

标签: java hibernate

我是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部分(实际上,程序员是问题:))。我尝试从头开始重写所有内容,现在它按预期工作。

1 个答案:

答案 0 :(得分:0)

问题肯定在Hibernate部分(实际上,程序员是问题:))。我尝试从头开始重写所有内容,现在它按预期工作。