路径表达式
路径表达式就是一个标识变量后跟导航运算符 ( . )和容器管理的持久性 (CMP) 或关系名称。
如果 cmr 字段是单值的,那么可以进一步导航得到 cmr 字段的路径表达式。如果路径表达式得到多值关系,那么路径表达式就此结束,并且无法进一步导航。如果路径表达式得到类型为值对象的 CMP 字段,那么可以导航至值对象的属性。
示例:值对象
SELECT object(e) FROM EmpBean e
WHERE e.address.distance('San Jose') < 10 and e.address.zip = 95037
如果您打算按值属性搜索,那么最好使用组合器模式将值对象属性映射至关系列。如果您以序列化格式存储值对象,那么必须从数据库检索每个值对象并进行反序列化。只能在动态查询中执行值对象方法。
路径表达式还可以指向 Bean 方法。必须在远程或本地 Bean 接口上定义方法。只能在动态查询中使用方法。您不能在单个查询语句中同时使用远程和本地方法。
如果查询包含远程方法,那么必须使用查询远程接口来执行动态查询。使用查询远程接口导致查询服务激活 Bean 并创建远程 Bean 接口的实例。
同样地,必须使用查询本地接口执行使用本地 Bean 方法的查询语句。这导致查询服务激活 Bean 和本地接口实例。
不要使用 get 方法来访问 Bean 的 CMP 和 cmr 字段。
如果方法有过载定义,那么过载方法的参数个数必须不同。
方法必须有非空返回类型和方法自变量,且返回类型必须是基本类型 byte、short、int、long、float、double、boolean、char 或来自以下列表的包装器类型:
Byte、Short、Integer、Long、Float、Double、BigDecimal、String、Boolean、Character、java.util.Calendar、java.sql.Date、java.sql.Time、java.sql.Timestamp、java.util.Date
如果方法的任何输入自变量是 NULL,那么假设方法返回 NULL 值,且不调用方法。
多个值的路径表达式在 FROM 子句中可以用作集合成员声明,在 WHERE 子句中与 IS EMPTY、MEMBER OF 和 EXISTS 谓词协同使用。
FROM 子句用法语句 | 有效性语句 |
---|---|
|
确定 |
|
INVALID - 无法通过 emps 导航,因为它是多值的 |
|
确定 |
|
确定 |