Let's consider we have this enum
public enum EmpType {
FULL_TIME("e1"), PART_TIME("e2");
private String val;
private EmpType(String val) {
this.val = val;
}
@Override
public String toString() {
return val;
}
}
And the entity
@Entity
@NamedQueries({
@NamedQuery(name="Employee.findByEmployeeType", query="SELECT e FROM Employee e WHERE e.employeeType = ?1")
})
@Access(AccessType.FIELD)
public class Employee implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Transient
private EmpType empType;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public EmpType getEmpType() {
return empType;
}
public void setEmpType(EmpType empType) {
this.empType = empType;
}
@Access(AccessType.PROPERTY)
@Column(name="employee_type")
protected String getEmployeeType() {
return empType.toString();
}
protected void setEmployeeType(String employeeType) {
for ( EmpType empType : EmpType.values() ) {
if ( empType.toString().equals(employeeType)){
this.empType = empType;
}
}
}
@Override
public String toString() {
return " ID : " + id + ", employee type : " + empType;
}
}
Note : Please checkout how i'm using @Access annotations at two different places, they are mandatory.
public class Main {
public static void main(String[] args) {
Main m = new Main();
Employee e = new Employee();
e.setEmpType(EmpType.PART_TIME);
em.persist(e); // assume we are persisting this entity
m.executeQuery(EmpType.PART_TIME);
}
public void executeQuery(EmpType emptType) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("PrepApp1PU");
EntityManager em = emf.createEntityManager();
Query query = em.createNamedQuery("Employee.findByEmployeeType");
query.setParameter(1, emptType.toString());
List list = query.getResultList();
System.out.println ( list.get(0) );
}
}
the above code will save entity as follows
ID EMPLOYEE_TYPE
1 e2
Also please carefully checkout how i'm searching employees based on enums. Also carefully checkout getEmployeeType(), setEmployeeType method signatures
the executeQuery method will print this
ID : 1, employee type : e2
public enum EmpType {
FULL_TIME("e1"), PART_TIME("e2");
private String val;
private EmpType(String val) {
this.val = val;
}
@Override
public String toString() {
return val;
}
}
And the entity
@Entity
@NamedQueries({
@NamedQuery(name="Employee.findByEmployeeType", query="SELECT e FROM Employee e WHERE e.employeeType = ?1")
})
@Access(AccessType.FIELD)
public class Employee implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Transient
private EmpType empType;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public EmpType getEmpType() {
return empType;
}
public void setEmpType(EmpType empType) {
this.empType = empType;
}
@Access(AccessType.PROPERTY)
@Column(name="employee_type")
protected String getEmployeeType() {
return empType.toString();
}
protected void setEmployeeType(String employeeType) {
for ( EmpType empType : EmpType.values() ) {
if ( empType.toString().equals(employeeType)){
this.empType = empType;
}
}
}
@Override
public String toString() {
return " ID : " + id + ", employee type : " + empType;
}
}
Note : Please checkout how i'm using @Access annotations at two different places, they are mandatory.
public class Main {
public static void main(String[] args) {
Main m = new Main();
Employee e = new Employee();
e.setEmpType(EmpType.PART_TIME);
em.persist(e); // assume we are persisting this entity
m.executeQuery(EmpType.PART_TIME);
}
public void executeQuery(EmpType emptType) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("PrepApp1PU");
EntityManager em = emf.createEntityManager();
Query query = em.createNamedQuery("Employee.findByEmployeeType");
query.setParameter(1, emptType.toString());
List
System.out.println ( list.get(0) );
}
}
the above code will save entity as follows
ID EMPLOYEE_TYPE
1 e2
Also please carefully checkout how i'm searching employees based on enums. Also carefully checkout getEmployeeType(), setEmployeeType method signatures
the executeQuery method will print this
ID : 1, employee type : e2
Comments
you are using the enum as a placeholder for string values. Basicaly enum is used just like any class or interface. You can put your values in an entity class as well.