跳转到内容

Jakarta EE 编程/EJB-QL

25% developed
来自维基教科书,开放世界中的开放书籍

EJB 查询语言用于定义实体 Bean 的查找方法应该返回什么。EJB 1.1 规范没有提供查询实体 Bean 的方法。导致不同的应用程序服务器使用不同的查询语言。当 Sun 发布 EJB 2.0 规范时,它添加了一种查询语言,以便更轻松地查找实体 Bean。

基本语法

[编辑 | 编辑源代码]
SELECT_CLAUSE FROM_CLAUSE [WHERE_CLAUSE]

必须使用 SELECT_CLAUSE 和 FROM_CLAUSE,但 WHERE_CLAUSE 是可选的。

查找方法

[编辑 | 编辑源代码]

查找方法用于从存储中返回一个或多个实体。查找方法在实体的主接口中定义。查找方法的返回值是 Bean 的远程接口或实现远程接口的实体 Bean 集合,这些实体 Bean 被找到。

基本查找方法

[编辑 | 编辑源代码]

最简单的 EJB 查询是返回给定表中的所有实体的查询。

@ejb.finder
  signature="Collection findAll()"
  query="SELECT DISTINCT OBJECT(p) FROM Player p"

如您所见,EJB 查询看起来几乎与标准 SQL 查询相同,尽管它不是表名,而是 EJB 类名,也不是列名,而是 EJB 属性名。唯一的区别是终端 object(o),它等同于:获取给定行的所有列,并将结果转换为实体 Bean 实例。

带有 WHERE 子句的查找方法

[编辑 | 编辑源代码]

查看上面的示例。它与上面的查找方法的不同之处在于,它添加了对要返回的球员的条件。

@ejb.finder
  signature="Collection findByPosition(java.lang.String position)"
  query="SELECT DISTINCT OBJECT(p) FROM Player p WHERE p.position = ?1"

此查找方法返回所有在参数一中输入的位置上比赛的球员。如果您有多个参数,您可以在查询中使用它们,例如 ?2、?3 等。

对关系进行操作的查找方法

[编辑 | 编辑源代码]

当您想使用不同的关系表时,EJB 查询与 SQL 的区别尤其明显。

@ejb.finder
   signature="Collection findByCity(java.lang.String city)"
   query="SELECT DISTINCT OBJECT(p) FROM Player p, IN (p.teams) AS t WHERE t.city = ?1"

此查询返回所有球队在参数一中给定的城市比赛的球员。换句话说:返回所有在位于给定城市的球队中比赛的球员。

选择方法

[编辑 | 编辑源代码]

与查找方法相反,选择方法可能会返回持久字段或其他实体 Bean。因此,可以定义一个返回基本数据类型而不是完整对象的 select 方法。

Clipboard

待办事项
添加示例。



华夏公益教科书