在我的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查询?这对我有很大帮助。
答案 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控制台或任何其他客户端中,然后替换?具有必需的值,查询将成功。