java - hibernate中M-M关系中的记录顺序不正确

标签 java mysql hibernate many-to-many

我在 MySQL 数据库的桥接表中有四条记录。在 hibernate 中使用@ManyToMany,我得到了准确的员工顺序,但得到了不正确的项目顺序。以下是找出我在哪里犯错误所需的 Material 。

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",joinColumns=@JoinColumn(name="EMPLOYEE_ID"),inverseJoinColumns=@JoinColumn(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);
        }

最佳答案

你的代码确实没有意义。您迭代员工,对于员工列表中索引 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 实例,并且您的代码将会中断。在接口(interface)上编程。

关于java - hibernate中M-M关系中的记录顺序不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29934802/

相关文章:

mysql - 事务管理超时问题

java - 了解 JPA 中 @Version 注解的使用

java - 写入txt文件时按升序排序

php - $_FILES 什么都不返回

java - 谁能解释为什么 4 个日历中有 1 个显示 Time=?

javascript - 跟踪结果集中的特定行,然后获取该行的列值

MySQL LEFT JOIN 数组,如何返回多行?

java - hibernate + Spring 应用程序。在使用数据库之前添加逻辑

java - 使用 getResourceAsStream 在 Java 中不起作用

java - JSP 通常作为 .jsp 文件、预编译的 Java 文件或预编译的类文件提供吗?