java jpa 教程 查询_JPA 查询新对象示例

JPA教程 - JPA查询新对象示例

我们可以在JPQL中创建新对象。

以下代码调用JPQL中的EmployeeDetails构造函数。executeAndPrintQuery("SELECT NEW cn.w3cschool.common.EmployeeDetails(e.name, e.salary, e.department.name) FROM Employee e");

例子

下面的代码来自PersonDaoImpl.java。package cn.w3cschool.common;

import java.util.Arrays;

import java.util.Date;

import java.util.List;

import javax.persistence.EntityManager;

import javax.persistence.PersistenceContext;

import javax.persistence.Query;

import org.springframework.transaction.annotation.Transactional;

@Transactional

public class PersonDaoImpl {

public void test() {

Employee emp = new Employee();

emp.setName("Tom");

emp.setSalary(123);

emp.setStartDate(new Date());

emp.setId(1);

Project pro = new Project();

pro.setName("Design");

pro.getEmployees().add(emp);

Department dept = new Department();

dept.setName("Dept");

dept.getEmployees().add(emp);

emp.setDepartment(dept);

emp.getProjects().add(pro);

em.persist(dept);

em.persist(pro);

em.persist(emp);

executeAndPrintQuery("SELECT NEW cn.w3cschool.common.EmployeeDetails(e.name, e.salary, e.department.name) FROM Employee e");

}

private void executeAndPrintQuery(String queryString) {

try {

Query query = em.createQuery(queryString);

printQueryResult(queryString, query.getResultList());

} finally {

em.close();

}

}

private void printQueryResult(String queryString, List result) {

System.out.println("EJB QL: " + queryString+"\n");

System.out.println("Result:\n");

if (result.isEmpty()) {

System.out.println("No results Found\n");

} else {

for (Object o : result) {

System.out.println(resultAsString(o));

}

}

}

private String resultAsString(Object o) {

if (o instanceof Object[]) {

return Arrays.asList((Object[])o).toString();

} else {

return String.valueOf(o);

}

}

@PersistenceContext

private EntityManager em;

}

class EmployeeDetails {

private String name;

private long salary;

private String deptName;

public EmployeeDetails(String name, long salary, String deptName) {

this.name = name;

this.salary = salary;

this.deptName = deptName;

}

public String toString() {

return "EmployeeDetails name: " + name +

", salary: " + salary +

", deptName: " + deptName;

}

}

下面的代码来自Department.java。package cn.w3cschool.common;

import java.util.ArrayList;

import java.util.Collection;

import javax.persistence.Entity;

import javax.persistence.Id;

import javax.persistence.OneToMany;

@Entity

public class Department {

@Id

private int id;

private String name;

@OneToMany(mappedBy="department")

private Collection employees;

public Department() {

employees = new ArrayList();

}

public void setId(int id) {

this.id = id;

}

public void setName(String name) {

this.name = name;

}

public void setEmployees(Collection employees) {

this.employees = employees;

}

public int getId() {

return id;

}

public String getName() {

return name;

}

public Collection getEmployees() {

return employees;

}

public String toString() {

return "Department no: " + getId() +

", name: " + getName();

}

}

以下代码来自Employee.java。package cn.w3cschool.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.NamedQueries;

import javax.persistence.NamedQuery;

import javax.persistence.OneToMany;

import javax.persistence.Temporal;

import javax.persistence.TemporalType;

@Entity

public class Employee {

@Id

private int id;

private String name;

private long salary;

@Temporal(TemporalType.DATE)

private Date startDate;

@ManyToOne

private Employee manager;

@OneToMany(mappedBy="manager")

private Collection directs;

@ManyToOne

private Department department;

@ManyToMany

private Collection projects;

public Employee() {

projects = new ArrayList();

directs = new ArrayList();

}

public void setId(int id) {

this.id = id;

}

public void setName(String name) {

this.name = name;

}

public void setSalary(long salary) {

this.salary = salary;

}

public void setStartDate(Date startDate) {

this.startDate = startDate;

}

public void setManager(Employee manager) {

this.manager = manager;

}

public void setDirects(Collection directs) {

this.directs = directs;

}

public void setDepartment(Department department) {

this.department = department;

}

public void setProjects(Collection projects) {

this.projects = projects;

}

public int getId() {

return id;

}

public String getName() {

return name;

}

public long getSalary() {

return salary;

}

public Date getStartDate() {

return startDate;

}

public Department getDepartment() {

return department;

}

public Collection getDirects() {

return directs;

}

public Employee getManager() {

return manager;

}

public Collection getProjects() {

return projects;

}

public String toString() {

return "Employee " + getId() +

": name: " + getName() +

", salary: " + getSalary() +

", dept: " + ((getDepartment() == null) ? null : getDepartment().getName());

}

}

以下代码来自Project.java。package cn.w3cschool.common;

import java.util.ArrayList;

import java.util.Collection;

import javax.persistence.Entity;

import javax.persistence.Id;

import javax.persistence.ManyToMany;

@Entity

public class Project {

@Id

protected int id;

protected String name;

@ManyToMany(mappedBy="projects")

private Collection employees;

public Project() {

employees = new ArrayList();

}

public void setId(int id) {

this.id = id;

}

public void setName(String name) {

this.name = name;

}

public void setEmployees(Collection employees) {

this.employees = employees;

}

public int getId() {

return id;

}

public String getName() {

return name;

}

public Collection getEmployees() {

return employees;

}

public String toString() {

return "Project id: " + getId() + ", name: " + getName();

}

}下载 Query_new_Object.zip

上面的代码生成以下结果。EJB QL: SELECT NEW cn.w3cschool.common.EmployeeDetails(e.name, e.salary, e.department.name) FROM Employee e

Result:

EmployeeDetails name: Tom, salary: 123, deptName: Dept

以下是数据库转储。Table Name: DEPARTMENT

Row:

Column Name: ID,

Column Type: INTEGER:

Column Value: 0

Column Name: NAME,

Column Type: VARCHAR:

Column Value: Dept

Table Name: EMPLOYEE

Row:

Column Name: ID,

Column Type: INTEGER:

Column Value: 1

Column Name: NAME,

Column Type: VARCHAR:

Column Value: Tom

Column Name: SALARY,

Column Type: BIGINT:

Column Value: 123

Column Name: STARTDATE,

Column Type: DATE:

Column Value: 2014-12-29

Column Name: DEPARTMENT_ID,

Column Type: INTEGER:

Column Value: 0

Column Name: MANAGER_ID,

Column Type: INTEGER:

Column Value: null

Table Name: EMPLOYEE_PROJECT

Row:

Column Name: EMPLOYEES_ID,

Column Type: INTEGER:

Column Value: 1

Column Name: PROJECTS_ID,

Column Type: INTEGER:

Column Value: 0

Table Name: PROJECT

Row:

Column Name: ID,

Column Type: INTEGER:

Column Value: 0

Column Name: NAME,

Column Type: VARCHAR:

Column Value: Design

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值