hibernate别名的工作原理

hibernate别名的工作原理,hibernate,jpa,Hibernate,Jpa,我使用hibernate已经两年了,但我突然对一件事感到好奇:每当我在hibernate中编写一些hql时,它都会解析查询,并在我们不提供任何别名的情况下添加一些别名,如“select item_name as item_90_0”。我试着搜索了很多关于这个别名是如何提供特定号码的信息,但我没有得到正确的答案。你为什么没有找到任何东西,为什么你两年都不在乎,是因为只要它工作正常,它是完全不相关的。所以没有人在写这个。如果您想了解实际的细节,您应该逐步了解源代码,但我认为我可以大致了解正在发生的事

我使用hibernate已经两年了,但我突然对一件事感到好奇:每当我在hibernate中编写一些hql时,它都会解析查询,并在我们不提供任何别名的情况下添加一些别名,如“select item_name as item_90_0”。我试着搜索了很多关于这个别名是如何提供特定号码的信息,但我没有得到正确的答案。

你为什么没有找到任何东西,为什么你两年都不在乎,是因为只要它工作正常,它是完全不相关的。所以没有人在写这个。如果您想了解实际的细节,您应该逐步了解源代码,但我认为我可以大致了解正在发生的事情:

Hibernate为查询HQL、条件Api或Session.get之类的消息调用获取抽象指令,并将其转换为sql语句。因为这样的sql语句通常包含联接,包括自联接,所以列和表名可能不是唯一的。因此,hibernate为表和列创建别名

为此,它似乎采用了一个基本名称、附加和下划线以及数字。基本名称通常是相关列或表的简单名称

当然,当您的表或列碰巧使用这种模式命名时,这可能会产生冲突。例如,您可能有一个表t和一个表t_1,这可能与hibernate生成的别名冲突

为了避免这种情况,Hibernate似乎不使用全名,而只使用第一个下划线之前的部分。我确信他们必须做更多的技巧来避免其他名字奇怪的问题