Spring Data JPA用@ElementCollection时Postgres中Double被转整数如何解决
解决方法如下:
- 显式指定集合字段的数据库类型
修改你实体类中values字段的注解配置,通过columnDefinition直接声明PostgreSQL对应的浮点类型:
@ElementCollection(targetClass = Double.class) @CollectionTable(name = "mts_values_values", joinColumns = @JoinColumn(name = "mts_value_id")) @Column(name = "value", columnDefinition = "double precision not null") private List<Double> values;
@CollectionTable可以显式指定自动生成的副表的外键关联规则,避免JPA自动生成的字段规则出错;columnDefinition会强制使用你指定的类型生成表字段,跳过默认的自动映射逻辑,同时避免values作为SQL关键字可能引发的异常。
- 校验PostgreSQL方言配置
检查项目配置文件中的JPA方言配置,确认使用PostgreSQL专属方言,避免方言匹配错误导致的类型映射异常:
# application.properties 配置示例 spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect
# application.yml 配置示例 spring: jpa: database-platform: org.hibernate.dialect.PostgreSQLDialect
- 重新生成表结构
如果之前已经生成过整数类型的副表,JPA默认的update模式不会修改已存在字段的类型,你需要手动删除旧的副表,或者在开发环境将spring.jpa.hibernate.ddl-auto调整为create后重启项目,让JPA重新生成符合配置的表结构。
内容的提问来源于stack exchange,提问作者LeBraveLittleToaster
相关产品推荐
相关产品推荐

