How to create Hibernate Mapping for a self referencing table

chandra picture chandra · Apr 30, 2015 · Viewed 9.9k times · Source

I was asked how I would create a hibernate mapping for a column in a table that refers to the primary key of the table.

For example, an Employee table has EMP_ID as primary key and it also has MGR_ID column to know the manager of the employee. As a manager is also an Employee, it would be in the same table. Hence every Employee row has a manager Id which is also an employee.

  1. How do we create Hibernate Mapping for this Employee Class?
  2. How would the Employee class look like? Does it have just a manager Id in it or it will contain another Employee Object as a member variable.

Kindly help me with this kind of scenario. Thank you.

Answer

Chaitanya picture Chaitanya · Apr 30, 2015

You can have a reference to the manager in your Employee class.

The entity looks like this:

@Entity
@Table(name="EMPLOYEE")
public class Employee {

    @Id
    @Column(name="EMPLOYEE_ID")
    @GeneratedValue
    private Long employeeId;

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

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

    @ManyToOne(cascade={CascadeType.ALL})
    @JoinColumn(name="manager_id")
    private Employee manager;

    @OneToMany(mappedBy="manager")
    private Set<employee> subordinates = new HashSet<employee>();

    public Employee() {
    }

    public Employee(String firstname, String lastname) {
        this.firstname = firstname;
        this.lastname = lastname;
    }

    // Getter and Setter methods
}

Refer to this link for complete example:

Hibernate Self Join Annotations One To Many mapping example