package WEBPIECESxPACKAGE.base.libs;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EntityManager;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Index;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.NoResultException;
import javax.persistence.OneToMany;
import javax.persistence.Query;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
@Entity
@Table(name="USERS",
indexes={
@Index(name="email", columnList="email", unique=true)
}
)
@NamedQueries({
@NamedQuery(name = "findAllUsers", query = "select u from UserDbo as u"),
@NamedQuery(name = "findByEmailId", query = "select u from UserDbo as u where u.email=:email"),
@NamedQuery(name = "findByIdWithRoleJoin", query = "select u from UserDbo as u left join fetch u.roles as r where u.id = :id")
})
public class UserDbo {
@Id
@SequenceGenerator(name="user_id_gen",sequenceName="user_sequence" ,initialValue=1,allocationSize=10)
@GeneratedValue(strategy=GenerationType.SEQUENCE,generator="user_id_gen")
private Integer id;
@Column(unique = true)
private String email;
private String phone;
private String name;
private String firstName;
private String lastName;
@ManyToOne(fetch=FetchType.LAZY)
private UserDbo manager;
@OneToMany(mappedBy = "manager")
private List<UserDbo> employees = new ArrayList<UserDbo>();
@OneToMany(mappedBy = "user")
private List<UserRole> roles = new ArrayList<UserRole>();
private EducationEnum levelOfEducation = null;
public Integer getId() {
return id;
}
public List<UserDbo> getEmployees() {
return employees;
}
public void setEmployees(List<UserDbo> employees) {
this.employees = employees;
}
public void addEmployee(UserDbo employee) {
this.employees.add(employee);
}
public void deleteEmployee(UserDbo employee) {
this.employees.remove(employee);
}
public void setId(Integer id) {
this.id = id;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public UserDbo getManager() {
return manager;
}
public void setManager(UserDbo manager) {
this.manager = manager;
}
@SuppressWarnings("unchecked")
public static List<UserDbo> findAll(EntityManager mgr) {
Query query = mgr.createNamedQuery("findAllUsers");
return query.getResultList();
}
public static UserDbo findByEmailId(EntityManager mgr, String email) {
Query query = mgr.createNamedQuery("findByEmailId");
query.setParameter("email", email);
try {
return (UserDbo) query.getSingleResult();
} catch (NoResultException e) {
return null;
}
}
public static UserDbo findWithJoin(EntityManager mgr, int id) {
Query query = mgr.createNamedQuery("findByIdWithRoleJoin");
query.setParameter("id", id);
try {
return (UserDbo) query.getSingleResult();
} catch (NoResultException e) {
return null;
}
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public EducationEnum getLevelOfEducation() {
return levelOfEducation;
}
public void setLevelOfEducation(EducationEnum levelOfEducation) {
this.levelOfEducation = levelOfEducation;
}
public List<UserRole> getRoles() {
return roles;
}
public void setRoles(List<UserRole> roles) {
this.roles = roles;
}
public void addRole(UserRole userRole) {
this.roles.add(userRole);
}
public void removeRole(UserRole r) {
this.roles.remove(r);
}
}