Mega Code Archive

 
Categories / Java Tutorial / JPA
 

Sql ResultSet Mapping With Entity Result And Field Result

File: Employee.java import java.io.Serializable; import java.util.ArrayList; import java.util.Collection; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.EntityResult; import javax.persistence.FieldResult; import javax.persistence.Id; import javax.persistence.IdClass; import javax.persistence.JoinColumn; import javax.persistence.JoinColumns; import javax.persistence.ManyToOne; import javax.persistence.OneToMany; import javax.persistence.SqlResultSetMapping; import javax.persistence.Table; @Entity @Table(name="EMP") @IdClass(EmployeeId.class) @SqlResultSetMapping(     name="EmployeeAndManager",     entities={         @EntityResult(entityClass=Employee.class),         @EntityResult(             entityClass=Employee.class,             fields={                 @FieldResult(name="country", column="MGR_COUNTRY"),                 @FieldResult(name="id", column="MGR_ID"),                 @FieldResult(name="name", column="MGR_NAME"),                 @FieldResult(name="manager.country", column="MGR_MGR_COUNTRY"),                 @FieldResult(name="manager.id", column="MGR_MGR_ID")             }         )     } ) public class Employee {     @Id private String country;     @Id     private int id;     private String name;          @ManyToOne      @JoinColumns({         @JoinColumn(name="MANAGER_COUNTRY", referencedColumnName="COUNTRY"),         @JoinColumn(name="MANAGER_ID", referencedColumnName="ID")     })     private Employee manager;          @OneToMany(mappedBy="manager")     private Collection<Employee> directs = new ArrayList<Employee>();     public int getId() {         return id;     }          public void setId(int id) {         this.id = id;     }          public String getCountry() {         return country;     }     public void setCountry(String country) {         this.country = country;     }     public String getName() {         return name;     }          public void setName(String name) {         this.name = name;     }          public Collection<Employee> getDirects() {         return directs;     }          public Employee getManager() {         return manager;     }          public void setManager(Employee manager) {         this.manager = manager;     } } class EmployeeId implements Serializable {     private String country;      private int id;      public EmployeeId() {}     public EmployeeId(String country, int id) {       this.country = country;       this.id = id;     }     public String getCountry() { return country; }     public int getId() { return id; }     public boolean equals(Object o) {          return ((o instanceof EmployeeId) &&                  country.equals(((EmployeeId)o).getCountry()) &&                 id == ((EmployeeId) o).getId());     }     public int hashCode() {          return country.hashCode() + id;      } } 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: 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 {   static EntityManagerFactory emf = Persistence.createEntityManagerFactory("JPAService");   static EntityManager em = emf.createEntityManager();   public static void main(String[] a) throws Exception {     em.getTransaction().begin();     Query query = em.createNativeQuery(         "SELECT e.country, e.id, e.name, " +         "e.manager_country, e.manager_id, m.country AS mgr_country, " +         "m.id AS mgr_id, m.name AS mgr_name," +         "m.manager_country AS mgr_mgr_country, m.manager_id AS mgr_mgr_id " +         "FROM   emp e, emp m ",         "EmployeeAndManager");     List list = query.getResultList();     em.getTransaction().commit();     em.close();     emf.close();     Helper.checkData();   } } File: persistence.xml <persistence xmlns="http://java.sun.com/xml/ns/persistence"              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"              xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/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>