Hibernate使用带有条件的别名

时间:2013-02-25 23:07:45

标签: hibernate alias criteria

说实话,我对别名有点困惑,所以我希望有人可以帮助我更好地理解它们。为了解释我所缺少的内容,我将使用示例。

让我们说:

Criteria criteria = session.createCriteria(Car.class)
criteria.createAlias("doors", "doors");

这意味着现在我可以使用一些Restrcitions来找到Car左侧的门或沿着这些线的东西。

现在我的问题是我在哪里添加多个别名:

criteria.createAlias("doors", "doors").createAlias("doors.keytype", "keytype");

criteria.createAlias("tier".tier);

这是什么意思?我的criteria对象是否包含所有这些别名?在哪种情况下getAlias()方法会返回什么?

来自API:

  

获取此条件实例封装的实体的别名。

我的印象是所有的别名都被这个实例封装了?我错了吗?我以某种方式失去了我的第一个别名吗?

如果我做了类似的事情:

Criteria criteri2 = criteria.createAlias("tier".tier);

这是否意味着criteriacriteria2点都是相同的Criteria或差异,哪一个指向哪个别名?

此外,鉴于每个createAlias都会返回Criteria,我应该将其分配给原始criteria还是新的?{/ p>

好吧,我希望你能看到我的困惑。

1 个答案:

答案 0 :(得分:3)

  

这是什么意思?我的标准对象是否包含所有这些别名?

  

在哪种情况下getAlias()方法会返回什么?

getAlias会返回createCriteria(Car.class)中使用的类的别名 - 您还没有使用过,但您可以指定:createCriteria(Car.class, "c"),其中criteria.getAlias()将返回c

  

这是否意味着条件和条件2点都是相同的标准或差异,哪一个指向别名?

Criteria API中的大多数方法都返回自己的标准,以支持链接,以及使用设施。您不需要保存返回的条件实例,因为对象(及其内部属性)正在内部更改。

criteria.createAlias("a.b", "a_b").add(Restrictions.eq("a_b", value));

类似于

criteria.createAlias("a.b", "a_b");
criteria.add(Restrictions.eq("a_b", value));

所以......

  

此外,假设每个createAlias都返回一个Criteria,我应该将其分配给原始条件还是新条件?

...不。对于hibernate的人来说,限制Criteria规范以强制程序员保存返回的实例是不可行的,并且它会有点违背OO标准假设标准对象没有改变。