package nl.amis.jpa.tuning.model.entities;
import java.io.Serializable;
import java.sql.Timestamp;
import java.util.List;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.QueryHint;
import org.eclipse.persistence.config.QueryHints;
@Entity
@NamedQueries(
{
@NamedQuery(name = "Employees.findAll",
query = "select o from Employees o"),
@NamedQuery(name = "Employees.findByLastName",
query = "select o from Employees o where o.lastName = :lastName"),
@NamedQuery(name = "Employees.findByLastName2",
query = "select o from Employees o where o.lastName = :lastName",
hints= { @QueryHint( name =QueryHints.LEFT_FETCH,
value="Employees.managerEmployeesList"),
@QueryHint( name =QueryHints.LEFT_FETCH,
value="Employees.managerDepartmentsList")
}
)
}
)
public class Employees implements Serializable {
private static final long serialVersionUID = 1L;
@Column(name="COMMISSION_PCT")
private Double commissionPct;
@Column(nullable = false, unique = true, length = 25)
private String email;
@Id
@Column(name="EMPLOYEE_ID", nullable = false)
private Long employeeId;
@Column(name="FIRST_NAME", length = 20)
private String firstName;
@Column(name="HIRE_DATE", nullable = false)
private Timestamp hireDate;
@Column(name="JOB_ID", nullable = false, length = 10)
private String jobId;
@Column(name="LAST_NAME", nullable = false, length = 25)
private String lastName;
@Column(name="PHONE_NUMBER", length = 20)
private String phoneNumber;
private Double salary;
@ManyToOne
@JoinColumn(name = "MANAGER_ID")
private Employees manager;
@OneToMany(mappedBy = "manager", fetch = FetchType.LAZY)
private List<Employees> managerEmployeesList;
@OneToMany(mappedBy = "manager", fetch = FetchType.LAZY)
private List<Departments> managerDepartmentsList;
@ManyToOne
@JoinColumn(name = "DEPARTMENT_ID")
private Departments departments;
public Employees() {
}
public Employees(Double commissionPct, Departments departments, String email,
Long employeeId, String firstName, Timestamp hireDate,
String jobId, String lastName, Employees manager,
String phoneNumber, Double salary) {
this.commissionPct = commissionPct;
this.departments = departments;
this.email = email;
this.employeeId = employeeId;
this.firstName = firstName;
this.hireDate = hireDate;
this.jobId = jobId;
this.lastName = lastName;
this.manager = manager;
this.phoneNumber = phoneNumber;
this.salary = salary;
}
public Double getCommissionPct() {
return commissionPct;
}
public void setCommissionPct(Double commissionPct) {
this.commissionPct = commissionPct;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Long getEmployeeId() {
return employeeId;
}
public void setEmployeeId(Long employeeId) {
this.employeeId = employeeId;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public Timestamp getHireDate() {
return hireDate;
}
public void setHireDate(Timestamp hireDate) {
this.hireDate = hireDate;
}
public String getJobId() {
return jobId;
}
public void setJobId(String jobId) {
this.jobId = jobId;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getPhoneNumber() {
return phoneNumber;
}
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
public Double getSalary() {
return salary;
}
public void setSalary(Double salary) {
this.salary = salary;
}
public Departments getDepartments() {
return departments;
}
public void setDepartments(Departments departments) {
this.departments = departments;
}
public void setManager(Employees manager) {
this.manager = manager;
}
public Employees getManager() {
return manager;
}
public void setManagerEmployeesList(List<Employees> managerEmployeesList) {
this.managerEmployeesList = managerEmployeesList;
}
public List<Employees> getManagerEmployeesList() {
return managerEmployeesList;
}
public void setManagerDepartmentsList(List<Departments> managerDepartmentsList) {
this.managerDepartmentsList = managerDepartmentsList;
}
public List<Departments> getManagerDepartmentsList() {
return managerDepartmentsList;
}
}