您的位置:首页 > 其它

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

2012-06-03 13:25 344 查看
  如果我们只需要查询实体中的某些属性,但是不希望查询的结果返回的是对象数组,就可以使用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();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: