Home >> Enterprise Java >> jpa >> One To Many bidirectional mapping in JPA


One To Many bidirectional mapping in JPA


package com.javacodegeeks.snippets.enterprise;

import java.util.Date;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

public class OneToManyBidirectionalMappingInJPA {
	
	public static void main(String[] args) {
		
		EntityManagerFactory emf = Persistence.createEntityManagerFactory("MyPersistenceUnit");
		
		EntityManager em = emf.createEntityManager();
		
		em.getTransaction().begin();
		
		Department department1 = new Department();
		department1.setName("Q/A");

		Department department2 = new Department();
		department2.setName("HR");
		
		Employee employee1 = new Employee();
		employee1.setName("Jack");
		employee1.setSurname("Thomson");
		employee1.setTitle("QA Engineer");
		employee1.setCreated(new Date());
		employee1.setDepartment(department1);

		Employee employee2 = new Employee();
		employee2.setName("Mary");
		employee2.setSurname("Nickolson");
		employee2.setTitle("QA Engineer");
		employee2.setCreated(new Date());
		employee2.setDepartment(department2);
		
		em.persist(department1);
		em.persist(department2);
		em.persist(employee1);
		em.persist(employee2);
		
		long employeeId1 = employee1.getId();
		long employeeId2 = employee2.getId();
		
		em.getTransaction().commit();
		
		em.getTransaction().begin();
		
		Employee dbEmployee1 =em.find(Employee.class, employeeId1);
		System.out.println("dbEmployee " + dbEmployee1);
		
		Employee dbEmployee2 =em.find(Employee.class, employeeId2);
		System.out.println("dbEmployee " + dbEmployee2);
		
		em.getTransaction().commit();
		
		em.close();
	    emf.close();

	}

}
package com.javacodegeeks.snippets.enterprise;

import java.util.Date;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;

@Entity
public class Employee {
	
	@Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	private Long id;
    private String name;
    private String surname;
    private String title;
    private Date created;
    @ManyToOne
    private Department department;
    
	public Long getId() {
		return id;
	}
	public void setId(Long id) {
		this.id = id;
	}
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
	public String getSurname() {
		return surname;
	}
	public void setSurname(String surname) {
		this.surname = surname;
	}
	
	public String getTitle() {
		return title;
	}
	public void setTitle(String title) {
		this.title = title;
	}
	
	public Date getCreated() {
		return created;
	}
	public void setCreated(Date created) {
		this.created = created;
	}
	
	public Department getDepartment() {
        return department;
    }
    
    public void setDepartment(Department department) {
        this.department = department;
    }
	
	@Override
	public String toString() {
		return "Employee [id=" + id + ", name=" + name + ", surname=" + surname
				+ ", title=" + title + "]";
	}

}
package com.javacodegeeks.snippets.enterprise;

import java.util.Collection;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;

@Entity
public class Department {
	
    @Id @GeneratedValue(strategy=GenerationType.AUTO)
    private int id;
    private String name;
    @OneToMany(mappedBy="employee")
    private Collection employees;

    public int getId() {
        return id;
    }
    
    public void setId(int id) {
        this.id = id;
    }
    
    public String getName() {
        return name;
    }
    
    public void setName(String deptName) {
        this.name = deptName;
    }
    
    public void addEmployee(Employee employee) {
        if (!employees.contains(employee)) {
        	employees.add(employee);
        }
    }

	public Collection getEmployees() {
		return employees;
	}

	@Override
	public String toString() {
		return "Department [employees=" + employees + ", id=" + id + ", name="
				+ name + "]";
	}
    
}

persistence.xml
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
    version="2.0">
	
	<persistence-unit name="MyPersistenceUnit" transaction-type="RESOURCE_LOCAL">
		<provider>org.hibernate.ejb.HibernatePersistence</provider>
		<properties>
			<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" />
			<property name="hibernate.hbm2ddl.auto" value="update" />
			<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" />
			<property name="hibernate.connection.username" value="jcg" />
			<property name="hibernate.connection.password" value="jcg" />
			<property name="hibernate.connection.url" value="jdbc:mysql://localhost/companydb" />
		</properties>
	</persistence-unit>
	
</persistence>

Output:
dbEmployee Employee [id=3, name=Jack, surname=Thomson, title=QA Engineer, phones=null]
dbEmployee Employee [id=4, name=Mary, surname=Nickolson, title=QA Engineer, phones=null]