Hibernate使用带有条件的别名

Bor*_*vat 6 alias hibernate criteria

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

让我们说我有:

Criteria criteria = session.createCriteria(Car.class)
criteria.createAlias("doors", "doors");
Run Code Online (Sandbox Code Playgroud)

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

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

criteria.createAlias("doors", "doors").createAlias("doors.keytype", "keytype");
Run Code Online (Sandbox Code Playgroud)

criteria.createAlias("tier".tier);
Run Code Online (Sandbox Code Playgroud)

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

来自API:

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

我的印象是所有的别名都被这个实例封装了?我错了吗?我不知何故失去了我的第一个别名?

如果我做的事情如下:

Criteria criteri2 = criteria.createAlias("tier".tier);
Run Code Online (Sandbox Code Playgroud)

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

如果每个都createAlias返回一个Criteria应该我分配给原始criteria或新的?

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

nun*_*uno 4

这是什么意思?我的条件对象具有所有这些别名吗?

是的

在这种情况下 getAlias() 方法将返回什么?

返回在- 您尚未使用过getAlias的类的别名,但您可以指定: ,其中将返回。createCriteria(Car.class)createCriteria(Car.class, "c")criteria.getAlias()c

这是否意味着 criteria 和 criteria2 点都是相同的 Criteria 或 diff,哪一个指向哪个别名?

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

criteria.createAlias("a.b", "a_b").add(Restrictions.eq("a_b", value));
Run Code Online (Sandbox Code Playgroud)

类似于

criteria.createAlias("a.b", "a_b");
criteria.add(Restrictions.eq("a_b", value));
Run Code Online (Sandbox Code Playgroud)

所以 ...

此外,考虑到每个 createAlias 返回一个 Criteria,我应该将其分配给原始标准还是新标准?

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