注意,最后的两个查询将需要超过一个的 SQL .这表明 ") 子句 没有对整个结果集进行正确
的排序. (这也说明你不能对这样的查询使用 9)&'方法.)
1.7.where 子句
% 子句允许你将返回的实例列表的范围缩小. 如果没有指定别名,你可以使用属性名来直接引用属性:
%8*:*
如果指派了别名,需要使用完整的属性名:
%8*:*
返回名为(属性 name 等于)'Fritz'的 类的实例。
%(8"
将返回所有满足下面条件的 类的实例: 存在如下的 的一个实例,其 " 属性等于 的
( 属性。 复合路径表达式使得 % 子句非常的强大,考虑如下情况:
%
该查询将被翻译成为一个含有表连接(内连接)的 SQL 查询。如果你打算写像这样的查询语句
%:"")
在 SQL 中,你为达此目的将需要进行一个四表连接的查询。
8运算符不仅可以被用来比较属性的值,也可以用来比较实例:
5%85
%8
特殊属性(小写)" 可以用来表示一个对象的唯一的标识符。(你也可以使用该对象的属性名。)
%"8;<=
%"8>
第二个查询是有效的。此时不需要进行表连接!
同样也可以使用复合标识符。比如 ! 类有一个复合标识符,它由 ) 属性 与
"- 属性组成。
$!
%")8*?*
"""-8;<=@A
$
%%")8*?*
"%""-8;<=@A
第二个查询也不需要进行表连接。
同样的,特殊属性 在进行多态持久化的情况下被用来存取一个实例的鉴别值(discriminator
value)。 一个嵌入到 where 子句中的 Java 类的名字将被转换为该类的鉴别值。
%8(
你也可以声明一个属性的类型是组件或者复合用户类型(以及由组件构成的组件等等)。永远不要尝试使
用以组件类型来结尾的路径表达式(path-expression) (与此相反,你应当使用组件的一个属性来结尾)。
举例来说,如果 % 含有一个包含了组件的实体 ""