文档介绍:Forpersonaluseonlyinstudyandresearch;mercialuseJPA查询语言(3)WHERE,GROUPBY,HAVING这条查询语句会返回一个User实例和他所创建帖子的数量。为了进一步缩小结果范围,你可以使用HAVING过滤分组信息(由GROUPBY标志)。下面的查询会返回User实例及他所发的帖子数量,前提是用户的密码是8个以上的字符。SELECTu,count(p)()>8 条件表达式(CONDITIONALEXPRESSIONS)条件表达式可以用在一个JPQL查询的WHERE和HAVING语句中。你必须了解使用条件表达式时的一些约束。条件表达式中包括LOB状态字段可能无法在数据库之间进行移植。字符串使用单引号字符串包裹,如'this'。如果要在查询中使用单引号,就要两个一起使用。你无法在查询中使用Java转义方法(例如,\'代表单引号)。布尔(Boolean)字符用TRUE和FALSE表示(不区分大小写),数字字符遵从Java规范,不支持日期字符串。同样可以支持Enum,但是你必须使用Enum,全路径名称,如,标识变量必须出现在一个SELECT或DELETE查询的FROM语句中。如果使用UPDATE,那么标识变量就必须在UPDATE语句中。标识变量往往表示他们所定义的实体类型,而不能表示一个集合中的实体。你可以使用位置或者命名形式的输入参数,但不能在某一查询混合使用这两种形式。输入参数可以出现一个查询的WHERE语句和(或者)HAVING语句中。位置形式参数的格式是以一个问号(?)打头紧跟一个以1开始的正整数。例如,?1。你可以在一个查询中多个使用同一位置参数,如下所示。=?=?1 命名形式的参数用一个冒号(:)加一个Java标志符如Java变量名来表示。命名参数表示如下:=:=:aDate 函数与表达式(FUNCTIONSANDEXPRESSIONS)JPQL支持函数功能,多种的IN,LIKE和BETWEEN样式表达式,及面向集合(collection)的条件表达式。这一节详细讨论写查询可用的各种选择。一个查询语句中操作符的优先级为:导航操作符(.)一元符号(+,-)乘(*),除(/)加(+),减(-)比较操作符,=,>,>=,<,<=,<>(不等),[NOT]BETWEEN,[NOT]LIKE,[NOT]IN,IS[NOT]NULL,IS[NOT]EMPTY,[NOT]MEMBER[OF]逻辑操作符,NOT,AND,ORBETWEEN你可以用BETWEEN操作符指定一个实体字段的范围。BETWEEN的语法是:expression[NOT]BETWEENexpressionANDexpression 这里expression可以是一个字符串,算术或日期时间表达式。这里有几个使用BETWEEN操作符的实例。: