Java/JPA/Enum

Материал из Java эксперт
Перейти к: навигация, поиск

Enumerated EnumType ORDINAL

   <source lang="java">

File: Student.java import java.util.Date; import javax.persistence.Entity; import javax.persistence.EnumType; import javax.persistence.Enumerated; import javax.persistence.Id; @Entity public class Student {

 @Id
 private long id = 0;
 private String name;
 private Date dateOfBirth = new Date();
 @Enumerated(EnumType.ORDINAL)
 private Gender gender;
 public Date getDateOfBirth() {
   return dateOfBirth;
 }
 public void setDateOfBirth(Date dateOfBirth) {
   this.dateOfBirth = dateOfBirth;
 }
 public long getId() {
   return id;
 }
 public void setId(long id) {
   this.id = id;
 }
 public String getName() {
   return name;
 }
 public void setName(String name) {
   this.name = name;
 }
 public Gender getGender() {
   return gender;
 }
 public void setGender(Gender gender) {
   this.gender = gender;
 }
 public String toString() {
   return "\n\nID:" + id + "\nName:" + name + "\nBirthday:" + dateOfBirth + "\nGender:"
       + gender+"\n\n";
 }

}

File: Gender.java public enum Gender {

 MALE, FEMALE

}

File: JPADAO.java import java.util.Date; import java.util.List; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; import javax.persistence.Query; public class JPADAO {

 EntityManagerFactory emf = Persistence.createEntityManagerFactory("JPAService");
 EntityManager em = emf.createEntityManager();
 public void create() {
   em.getTransaction().begin();
   
   
   Student student = new Student();
   student.setId(1);
   student.setName("Joe");
   student.setDateOfBirth(new Date());
   student.setGender(Gender.FEMALE);
   
   
   em.persist(student);
   em.flush();
   em.getTransaction().rumit();
 }
 public void search() {
   Query q = em.createQuery("select m from Student m");
   for (Student m : (List<Student>) q.getResultList()) {
     System.out.println(m);
   }
 }
 public void close() {
   em.close();
   emf.close();
 }

}

File: Main.java import java.util.List; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; import javax.persistence.Query; public class Main {

 public static void main(String[] a) throws Exception {
   JPADAO jpaDao = new JPADAO();
   
   jpaDao.create();
   jpaDao.search();
   
   
   jpaDao.close();
   Helper.checkData();
 }

} /*

   [java] Table Name: STUDENT
   [java]  Row:
   [java]     Column Name: ID,
   [java]     Column Type: BIGINT:
   [java]     Column Value: 1
   [java]     Column Name: DATEOFBIRTH,
   [java]     Column Type: TIMESTAMP:
   [java]     Column Value: 2008-11-05 13:32:00.35
   [java]     Column Name: GENDER,
   [java]     Column Type: VARCHAR:
   [java]     Column Value: FEMALE
   [java]     Column Name: NAME,
   [java]     Column Type: VARCHAR:
   [java]     Column Value: Joe
  • /

File: Helper.java import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.Statement; public class Helper {

 public static void checkData() throws Exception {
   Class.forName("org.hsqldb.jdbcDriver");
   Connection conn = DriverManager.getConnection("jdbc:hsqldb:data/tutorial", "sa", "");
   Statement st = conn.createStatement();
   ResultSet mrs = conn.getMetaData().getTables(null, null, null, new String[] { "TABLE" });
   while (mrs.next()) {
     String tableName = mrs.getString(3);
     System.out.println("\n\n\n\nTable Name: "+ tableName);
     ResultSet rs = st.executeQuery("select * from " + tableName);
     ResultSetMetaData metadata = rs.getMetaData();
     while (rs.next()) {
       System.out.println(" Row:");
       for (int i = 0; i < metadata.getColumnCount(); i++) {
         System.out.println("    Column Name: "+ metadata.getColumnLabel(i + 1)+ ",  ");
         System.out.println("    Column Type: "+ metadata.getColumnTypeName(i + 1)+ ":  ");
         Object value = rs.getObject(i + 1);
         System.out.println("    Column Value: "+value+"\n");
       }
     }
   }
 }

}


File: persistence.xml <persistence xmlns="http://java.sun.ru/xml/ns/persistence"

            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://java.sun.ru/xml/ns/persistence http://java.sun.ru/xml/ns/persistence/persistence" version="1.0">
 <persistence-unit name="JPAService" transaction-type="RESOURCE_LOCAL">
   <properties>
     <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
     <property name="hibernate.hbm2ddl.auto" value="update"/>
     <property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcDriver"/>
     <property name="hibernate.connection.username" value="sa"/>
     <property name="hibernate.connection.password" value=""/>
     <property name="hibernate.connection.url" value="jdbc:hsqldb:data/tutorial"/>
   </properties>
 </persistence-unit>

</persistence>


      </source>
   
  
 
  



Enumerated Value Mapping: EnumType.STRING

   <source lang="java">

File: Gender.java public enum Gender {

 MALE, FEMALE

}

File: Student.java import java.util.Date; import javax.persistence.Entity; import javax.persistence.EnumType; import javax.persistence.Enumerated; import javax.persistence.Id; @Entity public class Student {

 @Id
 private long id = 0;
 private String name;
 private Date dateOfBirth = new Date();
 @Enumerated(EnumType.STRING)
 private Gender gender;
 
 public Date getDateOfBirth() {
   return dateOfBirth;
 }
 public void setDateOfBirth(Date dateOfBirth) {
   this.dateOfBirth = dateOfBirth;
 }
 public long getId() {
   return id;
 }
 public void setId(long id) {
   this.id = id;
 }
 public String getName() {
   return name;
 }
 public void setName(String name) {
   this.name = name;
 }
 public Gender getGender() {
   return gender;
 }
 public void setGender(Gender gender) {
   this.gender = gender;
 }
 
 

}

File: JPADAO.java import java.util.Date; import java.util.List; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; import javax.persistence.Query; public class JPADAO {

 EntityManagerFactory emf = Persistence.createEntityManagerFactory("JPAService");
 EntityManager em = emf.createEntityManager();
 public void create() {
   em.getTransaction().begin();
   
   
   Student student = new Student();
   student.setId(1);
   student.setName("Joe");
   student.setDateOfBirth(new Date());
   student.setGender(Gender.FEMALE);
   
   
   em.persist(student);
   em.flush();
   em.getTransaction().rumit();
 }
 public void search() {
   Query q = em.createQuery("select m from Student m");
   for (Student m : (List<Student>) q.getResultList()) {
     System.out.println(m.getName() + " (Birthday: " + m.getDateOfBirth() + ")");
   }
 }
 public void close() {
   em.close();
   emf.close();
 }

}

File: Main.java import java.util.List; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; import javax.persistence.Query; public class Main {

 public static void main(String[] a) throws Exception {
   JPADAO jpaDao = new JPADAO();
   
   jpaDao.create();
   jpaDao.search();
   
   
   jpaDao.close();
   Helper.checkData();
 }

} /*

   [java] Table Name: STUDENT
   [java]  Row:
   [java]     Column Name: ID,
   [java]     Column Type: BIGINT:
   [java]     Column Value: 1
   [java]     Column Name: DATEOFBIRTH,
   [java]     Column Type: TIMESTAMP:
   [java]     Column Value: 2008-11-05 13:32:00.35
   [java]     Column Name: GENDER,
   [java]     Column Type: VARCHAR:
   [java]     Column Value: FEMALE
   [java]     Column Name: NAME,
   [java]     Column Type: VARCHAR:
   [java]     Column Value: Joe
  • /

File: Helper.java import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.Statement; public class Helper {

 public static void checkData() throws Exception {
   Class.forName("org.hsqldb.jdbcDriver");
   Connection conn = DriverManager.getConnection("jdbc:hsqldb:data/tutorial", "sa", "");
   Statement st = conn.createStatement();
   ResultSet mrs = conn.getMetaData().getTables(null, null, null, new String[] { "TABLE" });
   while (mrs.next()) {
     String tableName = mrs.getString(3);
     System.out.println("\n\n\n\nTable Name: "+ tableName);
     ResultSet rs = st.executeQuery("select * from " + tableName);
     ResultSetMetaData metadata = rs.getMetaData();
     while (rs.next()) {
       System.out.println(" Row:");
       for (int i = 0; i < metadata.getColumnCount(); i++) {
         System.out.println("    Column Name: "+ metadata.getColumnLabel(i + 1)+ ",  ");
         System.out.println("    Column Type: "+ metadata.getColumnTypeName(i + 1)+ ":  ");
         Object value = rs.getObject(i + 1);
         System.out.println("    Column Value: "+value+"\n");
       }
     }
   }
 }

}


File: persistence.xml <persistence xmlns="http://java.sun.ru/xml/ns/persistence"

            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://java.sun.ru/xml/ns/persistence http://java.sun.ru/xml/ns/persistence/persistence" version="1.0">
 <persistence-unit name="JPAService" transaction-type="RESOURCE_LOCAL">
   <properties>
     <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
     <property name="hibernate.hbm2ddl.auto" value="update"/>
     <property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcDriver"/>
     <property name="hibernate.connection.username" value="sa"/>
     <property name="hibernate.connection.password" value=""/>
     <property name="hibernate.connection.url" value="jdbc:hsqldb:data/tutorial"/>
   </properties>
 </persistence-unit>

</persistence>


      </source>
   
  
 
  



Map Java Enum Type

   <source lang="java">


File: Professor.java import static javax.persistence.EnumType.STRING; import javax.persistence.Entity; import javax.persistence.Enumerated; import javax.persistence.Id;

@Entity public class Professor {

 @Id
 private int id;
 private String name;
 private long salary;
 private ProfessorType type;
 @Enumerated(STRING)
 private ProfessorType previousType;
 public Professor() {
 }
 public Professor(int id) {
   this.id = id;
 }
 public int getId() {
   return id;
 }
 public void setId(int id) {
   this.id = id;
 }
 public String getName() {
   return name;
 }
 public void setName(String name) {
   this.name = name;
 }
 public long getSalary() {
   return salary;
 }
 public void setSalary(long salary) {
   this.salary = salary;
 }
 public ProfessorType getType() {
   return type;
 }
 public void setType(ProfessorType type) {
   this.previousType = this.type;
   if (this.previousType == null) {
     this.previousType = type;
   }
   this.type = type;
 }
 public ProfessorType getPreviousType() {
   return previousType;
 }
 public String toString() {
   return "Professor id: " + getId() + " name: " + getName() + " salary: " + getSalary();
 }

}

File: ProfessorService.java import java.util.Collection; import javax.persistence.EntityManager; import javax.persistence.Query; public class ProfessorService {

 protected EntityManager em;
 public ProfessorService(EntityManager em) {
   this.em = em;
 }
 public Professor createProfessor(int id, String name, long salary, ProfessorType type) {
   Professor emp = new Professor(id);
   emp.setName(name);
   emp.setSalary(salary);
   emp.setType(type);
   em.persist(emp);
   
   return emp;
 }
 public void removeProfessor(int id) {
   Professor emp = findProfessor(id);
   if (emp != null) {
     em.remove(emp);
   }
 }
 public Professor raiseProfessorSalary(int id, long raise) {
   Professor emp = em.find(Professor.class, id);
   if (emp != null) {
     emp.setSalary(emp.getSalary() + raise);
   }
   return emp;
 }
 public Professor findProfessor(int id) {
   return em.find(Professor.class, id);
 }
 public Collection<Professor> findAllProfessors() {
   Query query = em.createQuery("SELECT e FROM Professor e");
   return (Collection<Professor>) query.getResultList();
 }

}

File: ProfessorType.java

public enum ProfessorType {

 FULL_TIME_EMPLOYEE, PART_TIME_EMPLOYEE, CONTRACT_EMPLOYEE

}

File: Main.java import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; public class Main {

 public static void main(String[] a) throws Exception {
   JPAUtil util = new JPAUtil();
   EntityManagerFactory emf = Persistence.createEntityManagerFactory("ProfessorService");
   EntityManager em = emf.createEntityManager();
   ProfessorService service = new ProfessorService(em);
   em.getTransaction().begin();
   Professor emp = service.createProfessor(158, "AAA", 45000,ProfessorType.CONTRACT_EMPLOYEE);
   em.getTransaction().rumit();
   System.out.println("Persisted " + emp);
   util.checkData("select * from Professor");
   // remove an employee
   em.getTransaction().begin();
   service.removeProfessor(158);
   em.getTransaction().rumit();
   System.out.println("Removed Professor 158");
   util.checkData("select * from Professor");
   
   em.close();
   emf.close();
 }

}

File: JPAUtil.java import java.io.Reader; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.Statement; public class JPAUtil {

 Statement st;
 
 public JPAUtil() throws Exception{
   Class.forName("org.hsqldb.jdbcDriver");
   System.out.println("Driver Loaded.");
   String url = "jdbc:hsqldb:data/tutorial";
   Connection conn = DriverManager.getConnection(url, "sa", "");
   System.out.println("Got Connection.");
   st = conn.createStatement();
 }
 public void executeSQLCommand(String sql) throws Exception {
   st.executeUpdate(sql);
 }
 public void checkData(String sql) throws Exception {
   ResultSet rs = st.executeQuery(sql);
   ResultSetMetaData metadata = rs.getMetaData();
   for (int i = 0; i < metadata.getColumnCount(); i++) {
     System.out.print("\t"+ metadata.getColumnLabel(i + 1)); 
   }
   System.out.println("\n----------------------------------");
   while (rs.next()) {
     for (int i = 0; i < metadata.getColumnCount(); i++) {
       Object value = rs.getObject(i + 1);
       if (value == null) {
         System.out.print("\t       ");
       } else {
         System.out.print("\t"+value.toString().trim());
       }
     }
     System.out.println("");
   }
 }

}


File: persistence.xml <persistence xmlns="http://java.sun.ru/xml/ns/persistence"

            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://java.sun.ru/xml/ns/persistence http://java.sun.ru/xml/ns/persistence/persistence" version="1.0">
 <persistence-unit name="JPAService" transaction-type="RESOURCE_LOCAL">
   <properties>
     <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
     <property name="hibernate.hbm2ddl.auto" value="update"/>
     <property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcDriver"/>
     <property name="hibernate.connection.username" value="sa"/>
     <property name="hibernate.connection.password" value=""/>
     <property name="hibernate.connection.url" value="jdbc:hsqldb:data/tutorial"/>
   </properties>
 </persistence-unit>

</persistence>


      </source>