2016-09-30 2 views
0

나는 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 만보아야합니다. 그러나 어떤 이유로 그의 이름이 두 번 인쇄됩니다. taskId = 2에 대해 동일한 페이지를 열면 두 명의 직원이 네 번 인쇄됩니다. taskId = 1과 동일하게 세 명의 직원이 네 번 인쇄됩니다.

내 응용 프로그램 (@OneToMany, @ManyToOne 및 @OneToOne)의 다른 것들이 잘 작동합니다.

나는 너희들이 제공 할 수있는 어떤 도움 :)

편집 (및 솔루션) 감사 : 이 문제는 최대 절전 모드 부분에서 확실히했다 (실제로, 프로그래머가 : 문제였다). 나는 처음부터 모든것을 다시 써 보았고 이제 의도 한대로 작동한다.

+0

이것이 왜 JSF 문제일까요? 예를 들어를 사용할 때 제대로 작동한다는 것을 암시하고 있습니까? 'System.out.println()'을 사용하여 JSF 페이지 대신 목록 내용을 표시 하시겠습니까? – BalusC

+0

@BalusC 나는 이것을 시도하지는 않았지만,이 경우 JSF를 사용하고 있었기 때문에 태그를 넣어야한다고 생각했다. – vtomic85

+3

답변을 얻는 기회를 늘리려면 질문을 너무 광범위하게하지 말고 가능한 한 집중시켜야합니다. 그렇지 않으면 당신의 질문은 JSF에 대해 무언가를 알지 못하는 Hibernate 사용자에 의해 무시 될 가능성이 더 높다. 가능한 한 문제를 격리하십시오. 예 : "My TaskDAO.findById (taskId)는 중복 작업자가 포함 된 작업 개체를 반환합니다". 이 경우 JSF와 같은 모델을 제공하는 상용구 코드를 추가하는 것과는 완전히 관련이 없습니다. 가장 간단한 방법은'System.out.println()'입니다. – BalusC

답변

0

문제는 확실히 Hibernate 부분에있었습니다 (실제로 프로그래머가 문제였습니다 :)). 나는 처음부터 모든것을 다시 써 보았고 이제 의도 한대로 작동한다.