package fr.openwide.core.test.business.company.model;
import java.util.LinkedList;
import java.util.List;
import javax.persistence.Cacheable;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import fr.openwide.core.jpa.business.generic.model.GenericEntity;
import fr.openwide.core.test.business.person.model.Person;
import fr.openwide.core.test.business.project.model.Project;
@Entity
@Cacheable(true)
public class Company extends GenericEntity<Long, Company> {
private static final long serialVersionUID = -2003394192412589142L;
@Id
@GeneratedValue
private Long id;
private String name;
@OneToMany(mappedBy = "company")
private List<Person> directors = new LinkedList<Person>();
@OneToMany
@JoinTable(name="company_employees", joinColumns=@JoinColumn(name="company_id"),
inverseJoinColumns=@JoinColumn(name="employees_id"))
private List<Person> employees = new LinkedList<Person>();
@OneToMany(cascade = CascadeType.PERSIST)
@JoinTable(name="company_employees1", joinColumns=@JoinColumn(name="company_id"),
inverseJoinColumns=@JoinColumn(name="employees1_id"))
private List<Person> employees1 = new LinkedList<Person>();
@OneToMany(cascade = CascadeType.PERSIST)
@JoinTable(name="company_employees2", joinColumns=@JoinColumn(name="company_id"),
inverseJoinColumns=@JoinColumn(name="employees2_id"))
private List<Person> employees2 = new LinkedList<Person>();
@OneToMany(cascade = CascadeType.REMOVE)
@JoinTable(name="company_employees3", joinColumns=@JoinColumn(name="company_id"),
inverseJoinColumns=@JoinColumn(name="employees3_id"))
private List<Person> employees3 = new LinkedList<Person>();
@OneToMany(cascade = CascadeType.REMOVE)
@JoinTable(name="company_employees4", joinColumns=@JoinColumn(name="company_id"),
inverseJoinColumns=@JoinColumn(name="employees4_id"))
private List<Person> employees4 = new LinkedList<Person>();
/**
* {@link CascadeType#DELETE_ORPHAN} a été remplacé par {@link OneToMany#orphanRemoval()} ou
* {@link OneToOne#orphanRemoval()}
*/
@OneToMany(cascade = CascadeType.REMOVE, orphanRemoval = true)
@JoinTable(name="company_employees5", joinColumns=@JoinColumn(name="company_id"),
inverseJoinColumns=@JoinColumn(name="employees5_id"))
private List<Person> employees5 = new LinkedList<Person>();
@OneToMany(cascade = CascadeType.MERGE)
@JoinTable(name="company_employees6", joinColumns=@JoinColumn(name="company_id"),
inverseJoinColumns=@JoinColumn(name="employees6_id"))
private List<Person> employees6 = new LinkedList<Person>();
@OneToMany(mappedBy = "company")
private List<Project> projects = new LinkedList<Project>();
public Company() {
}
public Company(String name) {
this.name = name;
}
@Override
public Long getId() {
return id;
}
@Override
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<Person> getDirectors() {
return directors;
}
public void setDirectors(List<Person> directors) {
this.directors = directors;
}
public void addDirector(Person person) {
this.directors.add(person);
person.setCompany(this);
}
public void removeDirector(Person person) {
this.directors.remove(person);
person.setCompany(null);
}
public List<Person> getEmployees() {
return employees;
}
public void setEmployees(List<Person> employees) {
this.employees = employees;
}
public void addEmployee(Person person) {
this.employees.add(person);
}
public void removeEmployee(Person person) {
this.employees.remove(person);
}
public List<Person> getEmployees1() {
return employees1;
}
public void setEmployees1(List<Person> employees) {
this.employees1 = employees;
}
public void addEmployee1(Person person) {
this.employees1.add(person);
}
public void removeEmployee1(Person person) {
this.employees1.remove(person);
}
public List<Person> getEmployees2() {
return employees2;
}
public void setEmployees2(List<Person> employees) {
this.employees2 = employees;
}
public void addEmployee2(Person person) {
this.employees2.add(person);
}
public void removeEmployee2(Person person) {
this.employees2.remove(person);
}
public List<Person> getEmployees3() {
return employees3;
}
public void setEmployees3(List<Person> employees) {
this.employees3 = employees;
}
public void addEmployee3(Person person) {
this.employees3.add(person);
}
public void removeEmployee3(Person person) {
this.employees3.remove(person);
}
public List<Person> getEmployees4() {
return employees4;
}
public void setEmployees4(List<Person> employees) {
this.employees4 = employees;
}
public void addEmployee4(Person person) {
this.employees4.add(person);
}
public void removeEmployee4(Person person) {
this.employees4.remove(person);
}
public List<Person> getEmployees5() {
return employees5;
}
public void setEmployees5(List<Person> employees) {
this.employees5 = employees;
}
public void addEmployee5(Person person) {
this.employees5.add(person);
}
public void removeEmployee5(Person person) {
this.employees5.remove(person);
}
public List<Person> getEmployees6() {
return employees6;
}
public void setEmployees6(List<Person> employees) {
this.employees6 = employees;
}
public void addEmployee6(Person person) {
this.employees6.add(person);
}
public void removeEmployee6(Person person) {
this.employees6.remove(person);
}
public List<Project> getProjects() {
return projects;
}
public void setProjects(List<Project> projects) {
this.projects = projects;
}
public void addProject(Project project) {
this.projects.add(project);
project.setCompany(this);
}
public void removeProject(Project project) {
this.projects.remove(project);
project.setCompany(null);
}
@Override
public String getNameForToString() {
return getName();
}
@Override
public int compareTo(Company company) {
if (this == company) {
return 0;
}
return this.getName().compareToIgnoreCase(company.getName());
}
@Override
public String getDisplayName() {
return getName();
}
}