Hibernate SQL查询中的列名称已剥离

时间:2018-09-05 15:21:38

标签: postgresql hibernate

在我的Spring Boot应用程序中,我使用PostgreSQL作为基础数据库。出于调试目的,我打开了在控制台中显示查询的条件。

spring.jpa.show-sql=true
#spring.jpa.properties.hibernate.format_sql=true

logging.level.org.hibernate.SQL=DEBUG
logging.level.org.hibernate.type=TRACE
#logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE

查询发送到数据库后,将显示在控制台中。尽管与我数据库中的名称相对应,但此处使用的列名称等并不对应。例如:

select
    acceptedna0_.pkey as pkey1_0_,
    acceptedna0_.name_accepted as name_acc2_0_,
    acceptedna0_.station_pkey as station_3_0_ 
from
    station_names_accepted acceptedna0_ 
where
    acceptedna0_.name_accepted=?

好像它们已经缩短了什么。如何关闭此功能,以便查看实际查询?

也:是否可以查看实际的基础PostgreSQL查询?这对我有很大帮助。

1 个答案:

答案 0 :(得分:1)

这就是SQL的工作方式;它允许您将运行时别名定义为例如。缩短SQL语句,使其更人性化,或者(在这种情况下)适合您的特定用例,该用例将结果设置为POJO映射。

现在

from
    station_names_accepted acceptedna0_ 

意味着:“让别名station_names_accepted表名为acceptedna0_

从现在开始,在整个查询中,您可以使用别名station_names_accepted来引用该表,而不必使用acceptedna0_

通常,您会以sna之类的名字命名-但这就是Hibernate创建别名的方式-并不是人们可以理解的格式:)

以后(或更早一点)

select
    acceptedna0_.pkey as pkey1_0_,
    acceptedna0_.name_accepted as name_acc2_0_,
    acceptedna0_.station_pkey as station_3_0_ 

字面意思是:“让表pkey的别名accepteddna0列(这是别名)并称为pkey1_0_”。

相同的情况-从现在开始,您可以将pkey1_0_用作列引用。同样,它并不意味着人类可读,但是适合于Hibernate映射过程。

因此,通常,如果您将那个奇怪的SQL复制粘贴到PostgreSQL控制台或任何其他客户端中,然后替换?具有必需的值,查询将成功。