北在北方

太白枝头看,花开不计年,杯中浮日月,楼外是青天。

导航

JPA的查询语言—使用构造器

Posted on 2012-06-03 13:25  CN.programmer.Luxh  阅读(2054)  评论(0编辑  收藏  举报

  如果我们只需要查询实体中的某些属性,但是不希望查询的结果返回的是对象数组,就可以使用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();