如果我们只需要查询实体中的某些属性,但是不希望查询的结果返回的是对象数组,就可以使用JPQL通过实体的构造器进行查询,这样查询结果返回的就是实体。
实体User.java:
package com.cndatacom.jpa.entity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name="t_user")
public class User {
/**
* 主键
*/
@Id
@GeneratedValue
private Long id;
/**
* 名字
*/
@Column(name="name",length=50)
private String name;
/**
* 密码
*/
@Column(name="password",length=20)
private String password;
/**
* 邮箱
*/
@Column(name="email",length=50)
private String email;
/**
* 年龄
*/
@Column(name="age",length=3)
private int age;
public User() {
}
//使用name属性和age属性的构造方法
public User(String name, int age) {
super();
this.name = name;
this.age = age;
}
//使用name属性、email属性和age属性的构造方法
public User(String name, String email, int age) {
super();
this.name = name;
this.email = email;
this.age = age;
}
//以下省略getter/setter方法
//......
}
1、如果我们只是要查询User实体的name属性和age属性,先在User类中提供以这两个属性为参数的构造方法。再使用下面的语句进行查询:
SELECT new User(u.name,u.age) FROM User u
使用new User(u.name,u.age)使得返回的查询结果是实体的集合。
String jpql = "SELECT new User(u.name,u.age) FROM User u"; Query query = em.createQuery(jpql); List<User> resultList = query.getResultList();
2、如果我们只是要查询User实体的name属性、email属性和age属性,先在User类中提供以这三个属性为参数的构造方法,再使用下面的语句进行查询:
SELECT new User(u.name,u.email,u.age) FROM User u
使用new User(u.name,u.email,u.age)使得返回的查询结果是实体的集合。
String jpql = "SELECT new User(u.name,u.email,u.age) FROM User u"; Query query = em.createQuery(jpql); List<User> resultList = query.getResultList();