[英]Spring Boot application doesn't create schemas for JPA @Table annotation
我想讓表位於不同的數據庫模式中。 但不幸的是,我無法通過 Spring Boot 來實現這一點。 這里是重現它的步驟。
Create a new Spring Boot project on http://start.spring.io version 2.0.5 (with derby and PostgreSQL dependencies)
創建簡單實體
@Entity
@Table(name = "my_table")
public class MyTable {
@Id Integer id;
}
spring.jpa.hibernate.ddl-auto=create
運行生成的測試或主 class。 確保一切正常。
修改實體,將屬性schema
添加到@Table
注釋。 現在實體看起來像:
@Entity
@Table(name = "my_table", schema = "my_schema")
public class MyTable {
@Id Integer id;
}
java.sql.SQLSyntaxErrorException: Schema 'MY_SCHEMA' does not exist
”:完整的日志列表可在此處獲得: https://gist.github.com/asaushkin/8d767c92b2e7025dd359f7be43eefdd6
完整日志在這里: https://gist.github.com/asaushkin/dd0d677964556bf943c4f013d4785372
我的問題是:為什么 Spring Boot 沒有創建模式?
這些選項也無法解決此問題:
spring.jpa.properties.javax.persistence.schema-generation.create-database-schemas=true
spring.jpa.properties.hibernate.hbm2dll.create_namespaces=true
鏈接
更新(2019 年 3 月 11 日):
我剛剛檢查了問題的當前行為。 我想知道,但目前使用 Derby 驅動程序一切正常,並且表是使用指定的模式創建的。 但是在 PostgreSQL 中仍然存在錯誤。
生成的 SQL(對於 PostgreSQL)是:
create table my_schema.my_table (id int4 not null, primary key (id))
檢查您是否在 application.properties 文件中指定了數據庫方言以獲取更多信息,請檢查此線程。
我在 PostgreSQL 和 JPA 上遇到了同樣的問題(錯誤 ohejdbc.spi.SqlExceptionHelper - 錯誤:關系“schema.table”不存在),我想出了這個解決方案。
在您的實體類中,在數據庫元素的名稱之間添加轉義字符 \\"。例如:
使用這個表格:
@Table(name = "\"USUARIO\"", schema="\"INVENTARIODB\"")
而不是典型的方式
@Table(name = "USUARIO", schema="INVENTARIODB")
這同樣適用於列名
@Column(name = "\"ID\"", nullable = false, updatable = false)
private Long id;
而不是
@Column(name = "ID", nullable = false, updatable = false)
private Long id;
更新:
我發現了導致問題的原因。 我使用 Valentina Studio 創建我的數據庫,如果我使用大寫字母 (MYTABLE) 而不是小寫字母 (mytable) 來創建我的表,我必須在 SQL 語句中使用雙引號。 這是因為 PostgreSQL 區分大小寫。 如果您無法更改數據庫,請使用我的最后一個解決方案。 啟用 spring.jpa.show-sql=true 屬性也是一個好主意,這樣您就可以查看 hibernate 的查詢並了解發生了什么。
Rename spring.jpa.properties.javax.persistence.schema-generation.create-database-schemas
to spring.jpa.properties.javax.persistence.create-database-schemas
. 換句話說,刪除“.schema-generation”。
我只是遇到了同樣的問題,不是 PostgreSQL 而是 H2 - 沒有創建模式。 但是,正如我發現的那樣,問題不在於 H2(或者,可能是 PostgreSQL),而在於 Hibernate(關於該命名法,它偏離了標准)。 這可能意味着該解決方案也適用於您。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.