私はHibernateの初心者です。JSF2 + Hibernate 4.3を使用して私の最初のプロジェクトに取り組んでいます。 @ManyToMany
の関係に問題があると思います。Hibernateと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、私はワーカーリストにEmployee#3しか表示されません。しかし何らかの理由で、彼の名前は2度印刷されます。 taskId = 2の同じページを開くと、2人の従業員が4回印刷されます。 taskId = 1と同じ3人の従業員が4回印刷されます。
私のアプリケーション(@OneToMany、@ManyToOne、@OneToOne)の他のものは正常に動作します。
私はあなたたちが提供できるすべてのヘルプ:)
編集(およびソリューションを)認める: は問題はHibernateの一部に間違いだった(実際には、プログラマは:)問題でした)。私は最初からすべてを書き直そうとしましたが、今は意図どおりに動作します。
なぜこれがJSFの問題ですか?あなたは、それがうまく動作することを暗示していますか? 'System.out.println()'はJSFページの代わりにリストの内容を表示しますか? – BalusC
@BalusC私はそれを試していませんでしたが、この場合JSFを使用していたので、私はそのタグも置くべきだと思いました。 – vtomic85
答えを得る機会を増やすには、広すぎるのではなく、できるだけ集中して質問をするようにしてください。さもなければ、あなたの質問は、JSFについて何か知っていることがないHibernateユーザによって無視される可能性が高くなります。できるだけ問題を分離してください。たとえば、 "My TaskDAO.findById(taskId)は、重複するワーカーを含むタスクオブジェクトを返します"。そのような場合、JSFなどのモデルを提示するだけの定型コードを追加することは完全に無関係です。あなたは最も簡単な方法、 'System.out.println()'に行くべきです。ありがとうございます。 – BalusC