java - 在 Spring Boot 上使用正确的方言 PostgreSQL

标签 java spring postgresql hibernate

我有一个名为 User 的实体,它指向一个名为 user 的表,在 PostgreSQL 中,该表应该用引号引起来才能正常工作。我知道我可以指定自定义表名,但 Hibernate 不应该自动进行引号吗?

有人告诉我,也许 Hibernate 没有使用 PostgreSQL 方言。当我的数据库配置如下时是否可能:

spring.datasource.url = jdbc:postgresql://localhost/database_name
spring.datasource.username = username
spring.datasource.password = password

如果是这样,我该如何让 Hibernate 使用正确的方言?

我试过:

spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect

spring.jpa.database=postgresql

spring.jpa.database-platform = org.hibernate.dialect.PostgreSQL94Dialect

spring.jpa.database=org.hibernate.dialect.PostgreSQLDialect

对错误没有影响:

Hibernate: insert into user (created_at, last_modified_at, account_id, email, hashed_password_salt, name, over_hashed_password, preferred_name, public_key, started_displaying_sites_at, watched_tutorial_at, id) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
2017-09-08 14:41:40.177  WARN 15764 --- [           main] o.h.engine.jdbc.spi.SqlExceptionHelper   : SQL Error: 0, SQLState: 42601
2017-09-08 14:41:40.177 ERROR 15764 --- [           main] o.h.engine.jdbc.spi.SqlExceptionHelper   : ERROR: syntax error at or near "user"
  Position: 13

最佳答案

问题不是方言,而是使用保留的 PostgreSQL 词 user 的查询。 您可以通过添加引号

@Entity(name = "`user`")

或者重命名user 表。

关于java - 在 Spring Boot 上使用正确的方言 PostgreSQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46117952/

相关文章:

java - 您可以反编译任何 .jar,这不是很奇怪\不安全吗?

java - 为什么这会返回 "org.apache.derby.client.net.NetResultSet42@1b5f7aa"

java - 如何在Spring Security 3.0中为用户详细信息对象设置自定义属性

java - Spring 表单中可变数量的字段

postgresql - Postgres-必须 to_timestamp() 忽略/不读取日期/时间字符串中间的特定字符

java - WSUnit 死了吗?还有什么选择?

java - 尝试从 CSV 文件中删除一行,我的代码删除了一行和下一行的一半

Spring OAuth2 问题

postgresql - 在 PostgreSQL : ERROR: "TZ"/"tz" not supported 上将 varchar 转换为时间戳

python-3.x - 查询数据库 postgreSQL