JPQL(JPAの照会文)
21852 ワード
一JPQLとSQL 1.JPQLとSQLは似ています。検索キーワードは同じ です。.唯一の違いは、JPQLがオブジェクトに向けられた であることです。
二、JPQL表記のルール
JPAの検索言語はsqlに似ています。.中には表名、列名が現れません。javaの類名、属性名、大文字と小文字を区別します。 .出現するsqlキーワードは同じ意味で、キーワードは大文字と小文字を区別しません。 .selectを書いてはいけません。selectの別名を書いてください。 三、JPQLの簡単な検索
二、JPQL表記のルール
JPAの検索言語はsqlに似ています。
package cn.itsource.test;
import cn.itsource.pojo.Department;
import cn.itsource.pojo.Employee;
import cn.itsource.pojo.Project;
import cn.itsource.utils.JpaUtils;
import org.junit.Test;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import java.math.BigDecimal;
import java.util.Arrays;
import java.util.List;
public class JpqlTest {
/**
* 2.2.1. 【 】
* @throws Exception
*/
@Test
public void test01() throws Exception {
EntityManager entityManager = JpaUtils.getEntityManager();
// Query
Query query = entityManager.createQuery("from Employee");
query.getResultList().forEach(e -> System.out.println(e));
JpaUtils.close(entityManager);
}
/**
* 2.2.2. 【 】
* @throws Exception
*/
@Test
public void test02() throws Exception {
EntityManager entityManager = JpaUtils.getEntityManager();
// Query
// 【 】
//String jpql = "select e.name,d.name from Employee e join e.department d";
String jpql = "select e.name,e.department.name from Employee e";
Query query = entityManager.createQuery(jpql);
// , ,List , Object[]
//java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to cn.itsource.pojo.Employee
List
pojo:Department.javapackage cn.itsource.pojo;
import javax.persistence.*;
import java.util.ArrayList;
import java.util.List;
@Entity
@Table(name="department")
public class Department {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;
private String provice;//
private String city;//
private String street;
// 【 】
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="manager_id")
private Employee manager;//
private String sn;//
//
@OneToMany(fetch = FetchType.LAZY,mappedBy = "department")//
private List employees = new ArrayList<>();
public List getEmployees() {
return employees;
}
public void setEmployees(List employees) {
this.employees = employees;
}
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 String getProvice() {
return provice;
}
public void setProvice(String provice) {
this.provice = provice;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getStreet() {
return street;
}
public void setStreet(String street) {
this.street = street;
}
public Employee getManager() {
return manager;
}
public void setManager(Employee manager) {
this.manager = manager;
}
public String getSn() {
return sn;
}
public void setSn(String sn) {
this.sn = sn;
}
@Override
public String toString() {
return "Department{" +
"id=" + id +
", name='" + name + '\'' +
", provice='" + provice + '\'' +
", city='" + city + '\'' +
", street='" + street + '\'' +
", sn='" + sn + '\'' +
'}';
}
}
Employee.javapackage cn.itsource.pojo;
import javax.persistence.*;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@Entity
@Table(name="employee")
public class Employee {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;
// 【 】
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="department_id")
private Department department;
private BigDecimal salary;//
private Date hireDate;//
// , 【 】
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name="project_employee",
joinColumns = {@JoinColumn(name="EMPLOYEE_ID")},
inverseJoinColumns = {@JoinColumn(name="PROJECT_ID")}
)
private List projects = new ArrayList<>();
public List getProjects() {
return projects;
}
public void setProjects(List projects) {
this.projects = projects;
}
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 Department getDepartment() {
return department;
}
public void setDepartment(Department department) {
this.department = department;
}
public BigDecimal getSalary() {
return salary;
}
public void setSalary(BigDecimal salary) {
this.salary = salary;
}
public Date getHireDate() {
return hireDate;
}
public void setHireDate(Date hireDate) {
this.hireDate = hireDate;
}
@Override
public String toString() {
return "Employee{" +
"id=" + id +
", name='" + name + '\'' +
", salary=" + salary +
", hireDate=" + hireDate +
", department_id=" + department.getSn() +
'}';
}
}
Phone.javapackage cn.itsource.pojo;
import javax.persistence.*;
@Entity
@Table(name="phone")
public class Phone {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String types;//
private String number;
// 【 】
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="employee_id")
private Employee employee;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getTypes() {
return types;
}
public void setTypes(String types) {
this.types = types;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
public Employee getEmployee() {
return employee;
}
public void setEmployee(Employee employee) {
this.employee = employee;
}
}
Project.javapackage cn.itsource.pojo;
import javax.persistence.*;
import java.util.ArrayList;
import java.util.List;
@Entity
@Table(name="project")
public class Project {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;
// 【 】
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="manager_id")
private Employee manager;
@ManyToMany(fetch = FetchType.LAZY,mappedBy = "projects")
private List employees = new ArrayList<>();
public List getEmployees() {
return employees;
}
public void setEmployees(List employees) {
this.employees = employees;
}
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 Employee getManager() {
return manager;
}
public void setManager(Employee manager) {
this.manager = manager;
}
@Override
public String toString() {
return "Project{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}