从Hibernate源代码,在Criteria.class中,我们有:
List cats = session.createCriteria(Cat.class)
.createCriteria("kittens")
.add( Restrictions.like("name", "Iz%") )
.list();
这里的'小猫'是什么?列的名称?是不是使用ProjectionList指定了列名?
由于
答案 0 :(得分:4)
以下是完整的example from the Hibernate docs:
16.4。协会
通过使用createCriteria()导航关联,您可以在相关实体上指定约束:
List cats = sess.createCriteria(Cat.class)
.add( Restrictions.like("name", "F%") )
.createCriteria("kittens")
.add( Restrictions.like("name", "F%") )
.list();
第二个createCriteria()返回一个新的Criteria实例,它引用了kittens集合的元素。
因此,“kittens”是Cat实体的集合类型属性,为其创建了一个嵌套标准,该标准将小猫限制为只有以F开头的名称。
我认为这意味着你只会得到以F开头的Cats,至少有一只名为F的小猫。
List cats = session.createCriteria(Cat.class)
.createCriteria("kittens")
.add( Restrictions.like("name", "Iz%") )
.list();
在你的例子中,它返回所有至少有一只以Iz开头的小猫的猫。
我觉得这种语法有点令人困惑,因为嵌套是扁平的。 Java源代码格式化程序也会删除有用的缩进。
不是使用ProjectionList指定列名吗?
这不是预测。你仍然得到所有“专栏”。这是选择(SQL术语中的WHERE子句)。
答案 1 :(得分:0)
小猫是属于Cat的系列。此查询将返回一个Cat对象列表,其Kittens集合仅包含以“Iz”开头的Cats。
编辑:请参阅Thilo的回答。