JPA教程 - JPA查询函数示例
JPQL支持的函数表达式如下所示。函数描述
ABS(number)返回number参数的无符号版本。结果类型与参数类型(整数,浮点型或双精度型)相同。
CONCAT(string1,string2)连接string1和string2。
CURRENT_DATE返回数据库服务器定义的当前日期。
CURRENT_TIME从数据库服务器返回当前时间。
CURRENT_TIMESTAMP返回数据库服务器的当前时间戳。
INDEX(identification variable)返回有序列表中实体的位置。
LENGTH(string)返回字符串参数中的字符数。
LOCATE(string1,string2 [,start])返回string1中string1的位置,可选择从start指示的位置开始。如果找不到字符串,结果为零。
LOWER(string)返回字符串参数的小写形式。
MOD(number1,number2)返回数字参数number1和number2的模数作为整数。
SIZE(collection)返回集合中元素的数量,如果集合为空则返回0。
SQRT(number)返回数字参数的平方根作为double。
SUBSTRING(string, start, end)返回输入字符串的一部分,从由start开始到length字符指示的索引开始。字符串索引从一个开始。
UPPER(string)返回字符串参数的大写形式。
TRIM([[LEADING | TRAILING | BOTH] [char] FROM] string)删除字符串中的前导和/或尾随字符。如果不使用可选的LEADING,TRAILING或BOTH关键字,则删除前导和尾随字符。默认修剪字符是空格字符。
以下代码显示如何在JPQL中使用CONCAT,SUBSTRING和LOCATE字符串函数。em.createQuery(
"UPDATE Phone p SET p.number = "
+ "CONCAT("0",SUBSTRING(p.number,"
+ "LOCATE(p.number, "-"), 4)), p.type = "Business" ")
.executeUpdate();
例子
以下代码来自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.Inheritance;
import javax.persistence.ManyToMany;
@Entity
@Inheritance
public class Project {
@Id
protected int id;
protected String name;
@ManyToMany
protected Collection employees = new ArrayList();
public int getId() {
return id;
}
public void setId(int projectNo) {
this.id = projectNo;
}
public String getName() {
return name;
}
public void setName(String projectName) {
this.name = projectName;
}
public Collection getProfessors() {
return employees;
}
public void addProfessor(Professor employee) {
if (!getProfessors().contains(employee)) {
getProfessors().add(employee);
}
if (!employee.getProjects().contains(this)) {
employee.getProjects().add(this);
}
}
public String toString() {
return getClass().getName().substring(getClass().getName().lastIndexOf(".")+1) +
" no: " + getId() +
", name: " + getName();
}
}
下面的代码来自PersonDaoImpl.java。package cn.w3cschool.common;<