File: Department.java 
 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
 
@Entity 
public class Department { 
  @Id 
  @GeneratedValue(strategy = GenerationType.IDENTITY) 
  private int id; 
 
  private String name; 
 
  public int getId() { 
    return id; 
  } 
 
  public void setId(int id) { 
    this.id = id; 
  } 
 
  public String getName() { 
    return name; 
  } 
 
  public void setName(String deptName) { 
    this.name = deptName; 
  } 
 
  public String toString() { 
    return "Department id: " + getId() + ", name: " + getName(); 
  } 
} 
 
 
File: Professor.java 
 
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.JoinColumn; 
import javax.persistence.ManyToOne; 
import javax.persistence.OneToMany; 
import javax.persistence.OneToOne; 
import javax.persistence.SqlResultSetMapping; 
import javax.persistence.SqlResultSetMappings; 
import javax.persistence.Table; 
 
@Entity 
@Table(name = "EMP") 
@SqlResultSetMappings( {  
   
  @SqlResultSetMapping( 
      name="ProfessorWithAddressColumnAlias", 
      entities={@EntityResult(entityClass=Professor.class, 
                              fields=@FieldResult(name="id", column="EMP_ID")), 
                @EntityResult(entityClass=Address.class)} 
  ) 
 
}) 
public class Professor { 
  @Id 
  @Column(name = "EMP_ID") 
  private int id; 
 
  private String name; 
 
  private long salary; 
 
  @OneToOne 
  private Address address; 
 
  @ManyToOne 
  @JoinColumn(name = "DEPT_ID") 
  private Department department; 
 
  @ManyToOne 
  @JoinColumn(name = "MANAGER_ID") 
  private Professor manager; 
 
  @OneToMany(mappedBy = "manager") 
  private Collection<Professor> directs = new ArrayList<Professor>(); 
 
  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 Address getAddress() { 
    return address; 
  } 
 
  public void setAddress(Address address) { 
    this.address = address; 
  } 
 
  public Department getDepartment() { 
    return department; 
  } 
 
  public void setDepartment(Department department) { 
    this.department = department; 
  } 
 
  public Collection<Professor> getDirects() { 
    return directs; 
  } 
 
  public void addDirect(Professor employee) { 
    if (!getDirects().contains(employee)) { 
      getDirects().add(employee); 
      if (employee.getManager() != null) { 
        employee.getManager().getDirects().remove(employee); 
      } 
      employee.setManager(this); 
    } 
  } 
 
  public Professor getManager() { 
    return manager; 
  } 
 
  public void setManager(Professor manager) { 
    this.manager = manager; 
  } 
 
  public String toString() { 
    return "Professor id: " + getId() + " name: " + getName() + " with MgrId: " 
        + (getManager() == null ? null : getManager().getId()); 
  } 
} 
 
 
File: ProfessorService.java 
 
import java.util.List; 
 
import javax.persistence.EntityManager; 
import javax.persistence.Query; 
 
public class ProfessorService { 
  protected EntityManager em; 
 
  public ProfessorService(EntityManager em) { 
    this.em = em; 
  } 
 
  public List findWithAlias() { 
    Query query = em.createNativeQuery( 
        "SELECT emp.emp_id AS emp_id, name, salary, manager_id, dept_id, address_id, " 
            + "address.id, street, city, state, zip " + "FROM emp, address " 
            + "WHERE address_id = id", "ProfessorWithAddressColumnAlias"); 
    return query.getResultList(); 
  } 
 
} 
 
 
File: Address.java 
 
import javax.persistence.Entity; 
import javax.persistence.Id; 
 
@Entity 
public class Address { 
  @Id 
  private int id; 
 
  private String street; 
 
  private String city; 
 
  private String state; 
 
  private String zip; 
 
  public int getId() { 
    return id; 
  } 
 
  public void setId(int id) { 
    this.id = id; 
  } 
 
  public String getStreet() { 
    return street; 
  } 
 
  public void setStreet(String address) { 
    this.street = address; 
  } 
 
  public String getCity() { 
    return city; 
  } 
 
  public void setCity(String city) { 
    this.city = city; 
  } 
 
  public String getState() { 
    return state; 
  } 
 
  public void setState(String state) { 
    this.state = state; 
  } 
 
  public String getZip() { 
    return zip; 
  } 
 
  public void setZip(String zip) { 
    this.zip = zip; 
  } 
 
  public String toString() { 
    return "Address id: " + getId() + ", street: " + getStreet() + ", city: " + getCity() 
        + ", state: " + getState() + ", zip: " + getZip(); 
  } 
 
} 
 
 
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: 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(); 
 
 
    service.findWithAlias(); 
     
    util.checkData("select * from EMP"); 
 
    em.getTransaction().commit(); 
    em.close(); 
    emf.close(); 
  } 
} 
 
 
 
 
 
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> 
 
 
 
 
    
     
  
  |