blob: ca2203339b79a1696939487b97e85cdbbe934936 [file] [log] [blame]
/*
* Copyright (c) 2015, 2020 Oracle and/or its affiliates. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0,
* or the Eclipse Distribution License v. 1.0 which is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
*/
// Contributors:
// ljungmann - initial implementation
package org.eclipse.persistence.testing.perf.jpa.model.metaannotations;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import jakarta.persistence.AttributeOverride;
import jakarta.persistence.AttributeOverrides;
import jakarta.persistence.Basic;
import jakarta.persistence.CascadeType;
import jakarta.persistence.CollectionTable;
import jakarta.persistence.Column;
import jakarta.persistence.ElementCollection;
import jakarta.persistence.Embedded;
import jakarta.persistence.Entity;
import jakarta.persistence.EntityListeners;
import jakarta.persistence.EnumType;
import jakarta.persistence.Enumerated;
import jakarta.persistence.FetchType;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.JoinTable;
import jakarta.persistence.ManyToMany;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.MapKeyColumn;
import jakarta.persistence.OneToMany;
import jakarta.persistence.OneToOne;
import jakarta.persistence.OrderColumn;
import jakarta.persistence.Version;
import org.eclipse.persistence.testing.perf.jpa.model.basic.Address;
import org.eclipse.persistence.testing.perf.jpa.model.basic.Degree;
import org.eclipse.persistence.testing.perf.jpa.model.basic.EmailAddress;
import org.eclipse.persistence.testing.perf.jpa.model.basic.EmploymentPeriod;
import org.eclipse.persistence.testing.perf.jpa.model.basic.Gender;
import org.eclipse.persistence.testing.perf.jpa.model.basic.JobTitle;
import org.eclipse.persistence.testing.perf.jpa.model.basic.Project;
@Entity
@EntityListeners(EListener.class)
public class RegularEmployee {
@Id
@Column(name = "EMP_ID")
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private long id;
@Version
private long version;
@Column(name = "F_NAME")
private String firstName;
@Column(name = "L_NAME")
private String lastName;
@Basic
@Column(name = "GENDER")
@Enumerated(EnumType.STRING)
private Gender gender = Gender.Male;
@Column(table = "P2_SALARY")
private double salary;
@Embedded
@AttributeOverrides( {
@AttributeOverride(name = "startDate", column = @Column(name = "START_DATE")),
@AttributeOverride(name = "endDate", column = @Column(name = "END_DATE")) })
private EmploymentPeriod period;
@OneToOne(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY)
@JoinColumn(name = "ADDR_ID")
private Address address;
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.PERSIST)
@JoinTable(name = "P2_EMP_JOB", joinColumns = @JoinColumn(name = "EMP_ID"), inverseJoinColumns = @JoinColumn(name = "TITLE_ID"))
private JobTitle jobTitle;
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
@JoinColumn(name="EMP_ID")
private List<Degree> degrees = new ArrayList<Degree>();
@ManyToMany
@JoinTable(name = "P2_PROJ_EMP", joinColumns = @JoinColumn(name = "EMP_ID"), inverseJoinColumns = @JoinColumn(name = "PROJ_ID"))
private List<Project> projects = new ArrayList<Project>();
@ElementCollection
@CollectionTable(name = "P2_RESPONS", joinColumns = @JoinColumn(name = "EMP_ID"))
@Column(name = "RESPONSIBILITY")
@OrderColumn(name = "PRIORITY")
private List<String> responsibilities = new ArrayList<String>();
@ElementCollection
@CollectionTable(name = "P2_EMAIL", joinColumns = @JoinColumn(name = "EMP_ID"))
@Column(name = "EMAIL_ADDRESS")
@MapKeyColumn(name = "EMAIL_TYPE")
private Map<String, EmailAddress> emailAddresses = new HashMap<String, EmailAddress>();
public RegularEmployee() {
}
public long getId() {
return id;
}
public void setId(long empId) {
this.id = empId;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String fName) {
this.firstName = fName;
}
public Gender getGender() {
return this.gender;
}
public void setGender(Gender gender) {
this.gender = gender;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lName) {
this.lastName = lName;
}
public long getVersion() {
return version;
}
public void setVersion(long version) {
this.version = version;
}
public List<Degree> getDegrees() {
return degrees;
}
public void setDegrees(List<Degree> degrees) {
this.degrees = degrees;
}
public Degree addDegree(String degree) {
return addDegree(new Degree(degree));
}
public Degree addDegree(Degree degree) {
getDegrees().add(degree);
return degree;
}
public Degree removeDegree(Degree degree) {
getDegrees().remove(degree);
return degree;
}
public List<Project> getProjects() {
return projects;
}
public void setProjects(List<Project> projectList) {
this.projects = projectList;
}
public Project addProject(Project project) {
getProjects().add(project);
return project;
}
public Project removeProject(Project project) {
getProjects().remove(project);
return project;
}
public void setAddress(Address address) {
this.address = address;
}
public Address getAddress() {
return address;
}
public void setPeriod(EmploymentPeriod period) {
this.period = period;
}
public EmploymentPeriod getPeriod() {
return period;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
public List<String> getResponsibilities() {
return this.responsibilities;
}
public void setResponsibilities(List<String> responsibilities) {
this.responsibilities = responsibilities;
}
public void addResponsibility(String responsibility) {
getResponsibilities().add(responsibility);
}
public void removeResponsibility(String responsibility) {
getResponsibilities().remove(responsibility);
}
public Map<String, EmailAddress> getEmailAddresses() {
return emailAddresses;
}
public void setEmailAddresses(Map<String, EmailAddress> emailAddresses) {
this.emailAddresses = emailAddresses;
}
public EmailAddress addEmailAddress(String type, String address) {
return addEmailAddress(type, new EmailAddress(address));
}
public EmailAddress addEmailAddress(String type, EmailAddress address) {
return getEmailAddresses().put(type, address);
}
public EmailAddress removeEmailAddress(String type) {
return getEmailAddresses().remove(type);
}
public EmailAddress getEmailAddress(String type) {
return getEmailAddresses().get(type);
}
public JobTitle getJobTitle() {
return jobTitle;
}
public void setJobTitle(JobTitle jobTitle) {
this.jobTitle = jobTitle;
}
@Override
public String toString() {
return "Employee(" + getId() + ": " + getLastName() + ", " + getFirstName() + ")";
}
}