6

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

可以说我有:

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

这意味着现在我可以使用一些限制来找到位于左侧的门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的还是新的?

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

4

1 回答 1

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,我应该将其分配给原始条件还是新条件?

... 不。对于处于休眠状态的人来说,限制 Criteria 规范以强制程序员保存返回的实例是不可行的,并且假设条件对象没有被更改,这有点违反 OO 标准。

于 2014-11-21T09:24:38.880 回答