我用下面的代码创建了一个表:
CREATE TABLE my_table(
id BIGSERIAL,
PRIMARY KEY(id)
) PARTITION BY RANGE (id);
CREATE TABLE my_table_2023_10 PARTITION OF my_table FOR VALUES FROM (1) to (100000);
字符串
application.yml:
server:
port: ${SERVER_PORT:12332}
spring:
datasource:
url: jdbc:postgresql://localhost:5432/pg_test
username: postgres
password: 12345
driverClassName: org.postgresql.Driver
jpa:
database-platform: org.hibernate.dialect.PostgreSQLDialect
hibernate.ddl-auto: validate
型
实体
@Entity(name = "my_table")
@Data
public class MyEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
}
型
build.gradle:
plugins {
id 'java'
id 'org.springframework.boot' version '2.7.12'
id 'io.spring.dependency-management' version '1.1.0'
}
group = 'com.spring.playground'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-validation'
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
implementation 'org.springdoc:springdoc-openapi-ui:1.6.11'
implementation 'org.postgresql:postgresql:42.6.0'
implementation 'org.mapstruct:mapstruct:1.5.5.Final'
annotationProcessor 'org.mapstruct:mapstruct-processor:1.5.5.Final'
}
型
当我启动我的应用程序时,我得到以下异常:由以下原因引起:javax.persistence.PersistenceException:[PersistenceUnit:default] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.tool.schema.spi.SchemaManagementException:Schema-validation:missing table [my_table]
如果我将hibernate.ddl-auto:validate替换为hibernate.ddl-auto:none,则可以正常工作
使用ddl-auto:none,hibernate可以很好地执行插入和更新。
类似的问题:JPA Hibernate Mapping Partitioned Table to an Entity
但它没有答案。
1条答案
按热度按时间9ceoxa921#
为了解决这个问题,你必须改变一点
Entity Class
:字符串
@Table注解允许您指定将用于在数据库中持久化实体的表的详细信息。@Table注解提供了四个属性,允许您覆盖表的名称、其目录和其架构,并对表中的列强制唯一约束。
在您的情况下,这就是原因,因为
MyEntity
不是数据库中的表名。更新
为fix
你必须在配置文件中添加下一个参数
型