Java Hibernate检索一对多关系中的错误对象列表

Java Hibernate检索一对多关系中的错误对象列表,java,hibernate,one-to-many,Java,Hibernate,One To Many,我刚开始冬眠。我得去学校和老师那里。一个系可以有许多教师,但一名教师只能隶属于一个系。我有以下映射: @Entity @Table(name = "department") public class Department { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id") private Integer id; @Column(name = "nam

我刚开始冬眠。我得去学校和老师那里。一个系可以有许多教师,但一名教师只能隶属于一个系。我有以下映射:

@Entity
@Table(name = "department")
public class Department {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Integer id;

    @Column(name = "name")
    private String name;

    @Column(name = "description")
    private String description;

    @OneToMany (cascade=CascadeType.ALL, fetch = FetchType.EAGER)
    @JoinColumn(name = "department_id")
    private List<Teacher> teachers = new ArrayList<Teacher>();
}
还有getter和setter,为了简单起见我省略了它们。 我正在使用MySql数据库。当我尝试在新的部门中加入新的教师时,一切都很顺利。但是,我也希望能够得到一个完整的部门名单和教师,分配给每个部门。目前在我的数据库中,我有5个部门和13个部门 老师们。但当我执行以下代码时:

    DepartmentDaoImpl ddi = new DepartmentDaoImpl();
    List<Department> departments = ddi.getAllDepartment();

    for (Department k : departments){
        printDepartmentData(k);
        List<Teacher> teachers = k.getTeachers();
        for (Teacher t : teachers){
            printTeacherName(t);
        }
    }
我有13个部门的例子。我有5个第一系的例子(我有5个老师分配给它),每个都有相同的5个老师分配,两个第二系的例子(我有两个老师分配给它),每个都有两个相同的老师分配,依此类推。 有人能想出,怎么解决它吗?我需要获得5个部门实例,使用

相应数量的教师。

进行以下更改并测试

   @OneToMany (cascade=CascadeType.ALL, fetch = FetchType.EAGER, mappedBy="department")
    private List<Teacher> teachers = new ArrayList<Teacher>();
@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.EAGER,mappedBy=“department”)
私人列表教师=新建ArrayList();

因为您使用
fetch=FetchType.EAGER配置了一对多关系,所以hibernate对这两个表执行联接。您看到的结果是由此联接引起的

确保在
部门
教师
中都有正确的
equals()
hashCode()
方法。如果这不能解决问题,请尝试使用
集合
而不是
列表

尝试更改为:

@OneToMany (mappedBy="department", cascade=CascadeType.ALL, fetch = FetchType.EAGER)
private Set<Teacher> teachers = new HashSet<Teacher>();
致:


在你的刀上试试这个,会有帮助的


结果=(ArrayList)session.createCriteria(Department.class)。setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY).list()

能否显示
DepartmentDaoImpl.getAllDepartment()
的实现?尝试删除
@JoinColumn(name=“department\u id”)
并重新运行,然后会发生什么情况?@mthmulders添加到post@Angga然后我得到了一张空的教师名单,但只有五个系的例子看看我的答案,您的问题是您将部门id称为部门内部的FK如果我理解正确,我应该删除JoinColumn注释吗?如果是这样的话,我会得到相同的结果。你必须添加mappedBy=“department”你能发布你的getTeachers()和getDepartment()方法吗?我有getTeacherById(int id),getAllTeachers()返回表中的所有教师,department也是这样。哪一个应该发布?不,在教师课堂上,你需要为私人部门部门设置getter和setter方法,同样在部门课堂上,你需要为私人列表教师设置getter和setter方法。如果如你所说,将JoinColumn设置为“id”,我将在每个部门只设置一名教师。该教师通过教师表中的id(主键)添加到部门。我在帖子中添加了我的SQL,也许会更清楚。对不起,我的不好,我误导了mappedBy和JoinColumn。现在已修复,该工作由我完成,但我在教师实体中测试它时没有获取,也没有多对一编辑,请给出教师内部部门指定转换为设置帮助的示例。但这是冬眠的正确方式吗?对我来说,这种方法似乎是一种变通方法。不,这是正确的方法。如果查看Hibernate教程,您会发现它们也使用了
Set
方法
CREATE TABLE teacher (
id INTEGER PRIMARY KEY auto_increment,
fName varchar(30),
lName VARCHAR(30),
degree VARCHAR(100),
department_id INTEGER
);
CREATE TABLE department(
id INTEGER PRIMARY KEY auto_increment,
name VARCHAR(100),
description VARCHAR(5000) 
);
   @OneToMany (cascade=CascadeType.ALL, fetch = FetchType.EAGER, mappedBy="department")
    private List<Teacher> teachers = new ArrayList<Teacher>();
@OneToMany (mappedBy="department", cascade=CascadeType.ALL, fetch = FetchType.EAGER)
private Set<Teacher> teachers = new HashSet<Teacher>();
@ManyToOne
private Department department;
@Collumn(name = "department")
private Integer department;