我正在我的实体类中添加下面的列
@NonNull
@Column(name = "interval_value", nullable = false)
@Type(PostgreSQLIntervalType.class)
private Duration intervalValue;
当我使用
spring.jpa.hibernate.ddl-auto: create
database-platform: org.hibernate.dialect.PostgreSQLDialect
我在SQL中得到错误
无法生成Hibernate SessionFactory;嵌套异常为org.hibernate.MappingException:为表创建SQL创建命令时出错:
模块pom.xml
<dependency>
<groupId>io.hypersistence</groupId>
<artifactId>hypersistence-utils-hibernate-62</artifactId>
<version>3.5.0</version>
</dependency>
<dependency>
<groupId>jakarta.validation</groupId>
<artifactId>jakarta.validation-api</artifactId>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.6.0</version>
</dependency>
根pom.xml
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.1.1</version>
<relativePath />
</parent>
如何使用spring jpa实体添加间隔列?
1条答案
按热度按时间ax6ht2ek1#
看起来您正在尝试使用Duration类型。问题是PostgreSQL本身不支持Duration类型。当您使用@Type(PostgreSQL IntervalType.class)注解时,Hibernate可能无法正确地将Duration类型Map到PostgreSQL间隔类型。
要解决这个问题,您可能需要自己处理Duration类型的Map,可能是将其转换为PostgreSQL可以理解的适当格式。
以下是您可以考虑的一般方法:
1-创建一个自定义属性转换器,在PostgreSQL可以处理的Duration和String表示之间进行转换。
2 -将自定义属性转换器应用于实体类中的intervalValue字段。
通过使用这个自定义属性转换器,您可以有效地将Duration类型转换为PostgreSQL可以处理的String表示,然后在从数据库检索时将其转换回Duration。