首页 > 解决方案 > 如何通过 Hibernate 在生成的 sql 中为别名添加引号?

问题描述

由于我使用的数据库(雪花),我必须引用休眠生成的别名。

Hibernate 生成如下示例

select emp0_.emp_id as emp_id1_0_0_, emp0_.name as name_2_0_0_ from test.employee emp0_ where emp0_.emp_id=? 

但我想将别名/标识符引用为

select emp0_.emp_id as "emp_id1_0_0_", emp0_.name as "name_2_0_0_" from test.employee emp0_ where emp0_.emp_id=? 

标签: hibernatejpaspring-data-jpa

解决方案


这不是您关于引用别名的实际问题的答案,但它可能是 JPA+Snowflake 套管问题的解决方案,因为我们遇到了相同的问题并寻找相同的解决方案。

如果您使用的是Snowflake JDBC库,则添加&CLIENT_RESULT_COLUMN_CASE_INSENSITIVE=true到 Snowflake 连接字符串的末尾将允许该库与 JPA/Hibernate 一起运行。确保您使用的是最新的 Snowflake JDBC,因为早期版本中的一些错误导致连接字符串在运行时从jdbc:snowflake://更改为 。https://

设置该连接属性将导致 columnName.toUpperCase()代码触发并且该getColumnIndex()方法现在可以工作。

您的问题范围之外的其他信息:当我们将 spring application.properties 设置如下时,我们能够使用 PagingAndSortingRepository 而无需我们自己的 DataSource 或任何其他配置类。

spring.jpa.properties.hibernate.dialect=[empty class extending org.hibernate.dialect.Dialect]
spring.datasource.driverClassName=net.snowflake.client.jdbc.SnowflakeDriver
spring.datasource.username=${snowflake.user}
spring.datasource.password=${snowflake.password}
spring.datasource.url=jdbc:snowflake://${snowflake.account}.snowflakecomputing.com/?warehouse=${snowflake.warehouse}&db=${snowflake.databaseName}&schema=${snowflake.schema}&CLIENT_RESULT_COLUMN_CASE_INSENSITIVE=true

推荐阅读