15.18. Row value 构造函数语法

优质
小牛编辑
130浏览
2023-12-01

HQL 支持 ANSI SQL row value constructor 语法(有时也叫作 tuple 语法),即使底层数据库可能不支持这个概念。在这里我们通常指的是多值(multi-valued)的比较,典型地是和组件相关联。来看看一个定义了 name 组件的实体 Person:

from Person p where p.name.first='John' and p.name.last='Jingleheimer-Schmidt'

那是有效的语法,虽然有点冗长。我们可以使它更加简洁一点,并使用 row value constructor 语法:

from Person p where p.name=('John', 'Jingleheimer-Schmidt')

select 子句里指定这个也是很有用的:

select p.name from Person p

当使用需要比较多个值的子查询时,采用 row value constructor 语法也很有用处:

from Cat as cat
where not ( cat.name, cat.color ) in (
    select cat.name, cat.color from DomesticCat cat
)

决定是否使用这个语法的一件因素就是:这个查询将依赖于元数据里的组件子属性(sub-properties)的顺序。