Skip to content
Snippets Groups Projects
Commit af683e5c authored by Goik Martin's avatar Goik Martin
Browse files

many to many relationship

parent 9c228467
No related branches found
No related tags found
No related merge requests found
package entity.company7;
import hibintro.util.HibernateUtil;
import org.hibernate.Session;
import org.hibernate.Transaction;
import entity.company7.model.Employee;
import entity.company7.model.Project;
/**
* Defining many-to-many relationship between
* {@link Employee} and {@link Project}
*
*/
public class Persist {
public static void main(String[] args) {
final Session session = HibernateUtil.createSessionFactory("entity/company7/hibernate.cfg.xml").openSession();
{
final Transaction transaction = session.beginTransaction();
final Employee martin = new Employee(123, "Martin Goik"),
eve = new Employee(140, "Eve Blix"),
jim = new Employee(160, "Jim Clarke");
session.save(martin);
session.save(eve);
session.save(jim);
final Project water = new Project(1, "Water supply")
,health = new Project(2, "Health management");
session.save(water);
session.save(health);
martin.addProject(water);
transaction.commit();
}
}
}
\ No newline at end of file
package entity.company7;
import hibintro.util.HibernateUtil;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;
import entity.company7.model.Employee;
import entity.company7.model.Project;
public class ReassignProjects {
public static void main(String[] args) {
final Session session = HibernateUtil.createSessionFactory("entity/company7/hibernate.cfg.xml").openSession();
{
final Transaction transaction = session.beginTransaction();
final Employee
martin = (Employee) session.createCriteria(Employee.class).add(
Restrictions.eq("staffNumber", 123)).list().get(0)
,eve = (Employee) session.createCriteria(Employee.class).add(
Restrictions.eq("staffNumber", 140)). list().get(0)
,jim = (Employee) session.createCriteria(Employee.class).add(
Restrictions.eq("staffNumber", 160)). list().get(0);
final Criteria searchProject = session.createCriteria(Project.class);
final Project water = (Project) searchProject.add(Restrictions.eq("no", 1)).list().get(0);
martin.removeProject(water);
eve.addProject(water);
jim.addProject(water);
session.save(martin);
session.save(eve);
session.save(jim);
transaction.commit();
}
}
}
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory >
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.password">XYZ</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hdm</property>
<property name="hibernate.connection.username">hdmuser</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.format_sql">true</property>
<property name="hibernate.hbm2ddl.auto">update</property>
<mapping class="entity.company7.model.Laptop"/>
<mapping class="entity.company7.model.Employee"/>
<mapping class="entity.company7.model.Project"/>
</session-factory>
</hibernate-configuration>
package entity.company7.model;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.UniqueConstraint;
/**
*
* {@link Employee} instances related to {@link Department}
*
*/
@Entity
@Table(uniqueConstraints={@UniqueConstraint(columnNames={"staffNumber"})})
public class Employee {
@Id
@GeneratedValue
public Long getId() {return id;}
protected void setId(Long id) {this.id = id;}
private Long id;
public int getStaffNumber() { return staffNumber;}
public void setStaffNumber(int staffNumber) { this.staffNumber = staffNumber;}
int staffNumber = Integer.MIN_VALUE;
public String getCname() { return cname;}
public void setCname(String cname) { this.cname = cname;}
private String cname; // Common name
/**
* One {@link Laptop} per {@link Employee}.
*
* @return {@link Laptop} "owned" by {@link Employee}.
*/
@OneToOne(cascade={CascadeType.ALL})
public Laptop getLaptop() { return laptop;}
public void setLaptop(final Laptop laptop) {
if (getLaptop() == laptop) { return;}
if (null != getLaptop()) { getLaptop().setOwnerInternal(null);}
setLaptopInternal(laptop);
if (null != getLaptop()) {getLaptop().setOwnerInternal(this);}
}
protected void setLaptopInternal(final Laptop laptop) { this.laptop = laptop;}
private Laptop laptop;
@ManyToMany
public Set<Project> getProjects() { return projects;}
protected void setProjects(Set<Project> projects) { this.projects = projects;}
public void addProject(final Project project) {
getProjects().add(project);
project.getCollaborators().add(this);
}
public void removeProject(final Project project) {
getProjects().remove(project);
project.getCollaborators().remove(this);
}
private Set<Project> projects = new HashSet<Project>();
protected Employee(){}
public Employee(final int staffNumber, final String cname) {
setStaffNumber(staffNumber);
setCname(cname);
}
@Override
public boolean equals(Object other) {
if (this == other) {
return true;
} else if (other instanceof Employee) {
return getStaffNumber() == ((Employee) other).getStaffNumber();
} else {
return false;
}
}
@Override
public int hashCode() { return getStaffNumber();}
}
\ No newline at end of file
package entity.company7.model;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.UniqueConstraint;
/**
*
* Laptops possibly being assigned to {@link Employee}
*
*/
@Entity
@Table(uniqueConstraints={@UniqueConstraint(columnNames={"idNumber"})})
public class Laptop {
@Id
@GeneratedValue
public Long getId() {return id;}
protected void setId(Long id) {this.id = id;}
private Long id;
/**
* @return The device's unique part number
*/
public int getIdNumber() { return idNumber;}
public void setIdNumber(int idNumber) { this.idNumber = idNumber;}
int idNumber;
@OneToOne (mappedBy="laptop",cascade={CascadeType.ALL})
public Employee getOwner() { return owner;}
public void setOwner(Employee owner) {
if (getOwner() == owner) { return;}
if (null != getOwner()) { getOwner().setLaptopInternal(null);}
setOwnerInternal(owner);
if (null != getOwner()) { getOwner().setLaptopInternal(this);}
}
protected void setOwnerInternal(Employee owner) { this.owner = owner;}
Employee owner;
protected Laptop(){}
public Laptop(final int idNumber) {
setIdNumber(idNumber);
}
@Override
public boolean equals(Object other) {
if (this == other) {
return true;
} else if (other instanceof Laptop) {
return this.getIdNumber() == ((Laptop) other).getIdNumber();
} else {
return false;
}
}
@Override
public int hashCode() { return getIdNumber();}
}
\ No newline at end of file
package entity.company7.model;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import javax.persistence.Table;
import javax.persistence.UniqueConstraint;
/**
*
* {@link Project} instances related to {@link Employee}
*
*/
@Entity
@Table(uniqueConstraints={@UniqueConstraint(columnNames={"no"})})
public class Project {
@Id
@GeneratedValue
public Long getId() {return id;}
protected void setId(Long id) {this.id = id;}
private Long id;
public int getNo() { return no;}
public void setNo(int no) { this.no = no;}
int no;
public String getTitle() { return title;}
public void setTitle(String title) { this.title = title;}
String title;
@ManyToMany(mappedBy="projects")
public Set<Employee> getCollaborators() { return collaborators;}
public void setCollaborators(Set<Employee> collaborators) { this.collaborators = collaborators;}
private Set<Employee> collaborators = new HashSet<Employee>();
protected Project(){}
public Project(final int no, final String title) {
setNo(no);
setTitle(title);
}
@Override
public boolean equals(Object other) {
if (this == other) {
return true;
} else if (other instanceof Project) {
return getNo() == ((Project) other).getNo();
} else {
return false;
}
}
@Override
public int hashCode() { return getNo();}
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment