The simplest JP QL query selects all the instances of a single entity type.
Consider the following query:
SELECT e FROM Employee e
JP QL uses SQL syntax where possible.
SQL query selects from a table. JP QL selects from an entity from the application domain model.
The overall form of a select query is as follows:
SELECT <select_expression> FROM <from_clause> [WHERE <conditional_expression>] [ORDER BY <order_by_clause>]
The following code is from PersonDaoImpl.java.
package com.java2s.common; import java.util.List; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import org.springframework.transaction.annotation.Transactional; @Transactional public class PersonDaoImpl { public void test(){ prepareData(); List<Professor> l = em.createQuery("SELECT e FROM Professor e").getResultList(); for(Professor p:l){ System.out.println(p); } } private void prepareData(){ Professor p = new Professor(); p.setId(0); p.setName("TOM"); em.persist(p); } @PersistenceContext private EntityManager em; }
The following code is from Professor.java.
package com.java2s.common; import java.util.ArrayList; import java.util.Collection; import java.util.Date; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.ManyToMany; import javax.persistence.ManyToOne; import javax.persistence.OneToMany; import javax.persistence.OneToOne; import javax.persistence.Temporal; import javax.persistence.TemporalType; @Entity public class Professor { @Id private int id; private String name; private long salary; @Temporal(TemporalType.DATE) private Date startDate; @OneToOne private Address address; @OneToMany(mappedBy="employee") private Collection<Phone> phones = new ArrayList<Phone>(); @ManyToOne private Department department; @ManyToOne private Professor manager; @OneToMany(mappedBy="manager") private Collection<Professor> directs = new ArrayList<Professor>(); @ManyToMany(mappedBy="employees") private Collection<Project> projects = new ArrayList<Project>(); public int getId() { return id; } public void setId(int empNo) { this.id = empNo; } 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 Date getStartDate() { return startDate; } public void setStartDate(Date startDate) { this.startDate = startDate; } public Collection<Phone> getPhones() { return phones; } public void addPhone(Phone phone) { if (!getPhones().contains(phone)) { getPhones().add(phone); if (phone.getProfessor() != null) { phone.getProfessor().getPhones().remove(phone); } phone.setProfessor(this); } } public Department getDepartment() { return department; } public void setDepartment(Department department) { if (this.department != null) { this.department.getProfessors().remove(this); } this.department = department; this.department.getProfessors().add(this); } 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 Collection<Project> getProjects() { return projects; } public void addProject(Project project) { if (!getProjects().contains(project)) { getProjects().add(project); } if (!project.getProfessors().contains(this)) { project.getProfessors().add(this); } } public Address getAddress() { return address; } public void setAddress(Address address) { this.address = address; } public String toString() { return "Professor " + getId() + ": name: " + getName() + ", salary: " + getSalary() + ", phones: " + getPhones() + ", managerNo: " + ((getManager() == null) ? null : getManager().getId()) + ", deptNo: " + ((getDepartment() == null) ? null : getDepartment().getId()); } }
The code above generates the following result.
The following is the database dump.
Table Name: ADDRESS Table Name: DEPARTMENT Table Name: PHONE Table Name: PROFESSOR Row: Column Name: ID, Column Type: INTEGER: Column Value: 0 Column Name: NAME, Column Type: VARCHAR: Column Value: TOM Column Name: SALARY, Column Type: BIGINT: Column Value: 0 Column Name: STARTDATE, Column Type: DATE: Column Value: null Column Name: ADDRESS_ID, Column Type: INTEGER: Column Value: null Column Name: DEPARTMENT_ID, Column Type: INTEGER: Column Value: null Column Name: MANAGER_ID, Column Type: INTEGER: Column Value: null Table Name: PROJECT Table Name: PROJECT_PROFESSOR