说实话,我对别名有点困惑,所以我希望有人可以帮助我更好地理解它们。为了解释我所缺少的内容,我将使用示例。
让我们说:
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);
这是否意味着criteria
和criteria2
点都是相同的Criteria
或差异,哪一个指向哪个别名?
此外,鉴于每个createAlias
都会返回Criteria
,我应该将其分配给原始criteria
还是新的?{/ p>
好吧,我希望你能看到我的困惑。
答案 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标准假设标准对象没有改变。