hibernate createCriteria

时间:2011-01-17 03:10:25

标签: hibernate

从Hibernate源代码,在Criteria.class中,我们有:

List cats = session.createCriteria(Cat.class)
  .createCriteria("kittens")
      .add( Restrictions.like("name", "Iz%") )
  .list();

这里的'小猫'是什么?列的名称?是不是使用ProjectionList指定了列名?

由于

2 个答案:

答案 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的回答。