I'm new to hibernate. I have to tables Department and Teacher. One Department can have many teachers, but one teacher can be attached to only one department. I have the following mapping: 

```
@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>();
}

```

and 

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

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

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

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

    @ManyToOne
    private Department department;
}

```

also there are getters and setters, which I omitted for simplicity. 
I'm using MySql database. When I trying to insert new department with new teachers, everything works fine. But, also I want be able to get a full list of departments with teachers, assigned to each department. Currently in my database i have 5 departments and 13
teachers. But when I executing following code:

```
    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);
        }
    }

```

And my getAllDepartments implementation: 

```
@Override
public ArrayList getAllDepartment() throws SQLException {
    Session session = null;
    ArrayList<Department> result = null;
    try{
        session = HibernateUtil.getSessionFactory().openSession();
        result = (ArrayList)session.createCriteria(Department.class).list();
    }catch(Exception ex){
        ex.printStackTrace();
    }finally{
        if(session != null && session.isOpen()){
            session.close();
        }
    }
    return result;
}

```

Sql to create tables:

```
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) 
);

```

I get 13 instances of department. And I get 5 instances of first department (I have 5 teachers assigned to it) each of them have same five teacher assigned, two instances of second department (I have two teachers assigned to it) each of them have two same teachers assigned and so on.
Can someone figure out, how to fix it? I need to get 5 instances of department, with  

corresponding number of teachers.