0
我是新來的休眠,我正在使用我的第一個項目使用JSF2 +休眠4.3。我認爲我與@ManyToMany
關係有問題。休眠和JSF - 乘以行
相關表:表EMPLOYEE_TASK
的
- EMPLOYEE (id, first_name, last_name,...)
- TASK (id, title, description,...)
- EMPLOYEE_TASK (id, employee_id, task_id)
內容:
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部分(實際上,程序員是問題:))。我試圖從頭開始重寫所有內容,現在它按預期工作。
爲什麼這會成爲JSF問題?你是否暗示它在使用時可以正常工作? 'System.out.println()'顯示列表內容而不是JSF頁面? – BalusC
@BalusC我還沒有嘗試過,但因爲我在這種情況下使用JSF,所以我認爲我也應該放置該標籤。 – vtomic85
爲了增加獲得答案的機會,您應該儘量使問題儘量集中,而不是太寬泛。否則,你的問題更可能被沒有了解JSF的Hibernate用戶忽略。儘可能地隔離你的問題。例如:「我的TaskDAO.findById(taskId)返回一個包含重複工作的任務對象」。在這種情況下,添加僅提供模型的樣板代碼(如JSF)是完全不相關的。你應該採用最簡單的方法:'System.out.println()'。 – BalusC