2015-04-29 3 views
0

У меня есть четыре записи в таблице мостов в базе данных MySQL. Используя @ManyToMany в спящем режиме, я получаю точный порядок сотрудников, но неправильный неправильный проект. Ниже приводится необходимый материал, чтобы выяснить, где я делаю ошибку.Неправильный порядок записей в отношениях M-M в спящем режиме

Original Data in MySQL Database

But I get following result at stdout

Это источник.

 @Entity 
     @Table(name="PROJECT") 
     public class ProjectBean { 

      @Id @GeneratedValue @Column(name="PROJECT_ID") 
      private int projectId; 
      @Column(name="TITLE") 
      private String projectTitle; 
      @ManyToMany(mappedBy="projects") 
      private Collection<EmployeeBean> employees; 
      public ProjectBean() { 
       employees = new ArrayList<EmployeeBean>(); 
      } 

      //getters & setters 
} 



@Entity 
@Table(name="EMPLOYEE") 
public class EmployeeBean { 
    @Id @GeneratedValue @Column(name="EMPLOYEE_ID") 
    private int employee_id; 
    @Column(name="FIRST_NAME") 
    private String firstName; 
    @Column(name="LAST_NAME") 
    private String lastName; 
    @ManyToMany 
    @JoinTable(name="EMPLOYEE_PROJECT",[email protected](name="EMPLOYEE_ID"),[email protected](name="PROJECT_ID")) 
    private Collection<ProjectBean> projects; 

    public EmployeeBean() { 
     projects = new ArrayList<ProjectBean>(); 
    } 
    //getters and setters goes here 
} 

и, наконец, следующий основной класс, где я пытаюсь пройти список с тем же порядком, как мы можем видеть в самом верхнем изображении.

 ArrayList<ProjectBean> projects = (ArrayList<ProjectBean>)session.createQuery("SELECT projects FROM EmployeeBean").list(); 
     ArrayList<EmployeeBean> employees = (ArrayList<EmployeeBean>)session.createQuery("SELECT employees FROM ProjectBean").list(); 
     System.out.println("EmpID\tPrjID"); 
     int i = 0; 
     for (EmployeeBean employeeBean : employees) { 
      System.out.print(employeeBean + "\t"); 
      ProjectBean projectBean = (ProjectBean) projects.get(i); 
      i++; 
      System.out.println(projectBean); 
     } 

ответ

1

Ваш код действительно не имеет смысла. Вы перебираете сотрудников, а для каждого сотрудника по индексу i в списке сотрудников вы печатаете проект по индексу i из списка проектов.

Если вы хотите отобразить все проекты каждого сотрудника, вам нужен один запрос, и два вложенного цикл:

List<EmployeeBean> employees = session.createQuery("SELECT e FROM EmployeeBean e").list(); 
for (EmployeeBean employee : employees) { 
    System.out.println(employee); 
    for (Project project : employee.getProjects()) { 
     System.out.println("\t" + employee); 
    } 
} 

Кроме того, обратите внимание, что я не отбрасываю возвращение списка запроса к ArrayList: это абсолютно бесполезно и работает только потому, что Hibernate, как правило, возвращает ArrayList. Он может выбрать возврат любого другого экземпляра List, и ваш код сломается. Программа по интерфейсам.

+0

Привет JB. В вашем HQL имя псевдонима 'e' не определено. – Chaitanya

+0

Спасибо @Chaitanya. Исправлено. –

Смежные вопросы