Java11升级Java17+SpringBoot3+Hibernate6保存对象NPE问题求助
解决方案
1. 移除错误的@Converts注解
实体类上的@Converts配置完全无效:attributeName指定的"int-array"、"string-array"与实际字段名intvalues、content不匹配,且和@JdbcTypeCode注解冲突,直接删除该注解。
2. 修正数组字段的类型配置(二选一)
方式A:使用Hypersistence Utils自定义类型(推荐)
你已引入io.hypersistence:hypersistence-utils-hibernate-62依赖,直接用它适配PostgreSQL数组类型:
@Data @AllArgsConstructor @NoArgsConstructor @Builder @Entity @Table(name = "mapping") // 移除原@Converts注解 public class Mapping { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(columnDefinition = "serial") private Long id; @Column(name = "name_id") private String nameID; @Column(name = "pyouuu") private Integer pyouuu; @Column(name = "kocc") private Integer kocc; @Type(IntArrayType.class) @Column(name = "intvalues", columnDefinition = "integer[]") private Integer[] intvalues; @Type(StringArrayType.class) @Column(name = "content", columnDefinition = "text[]") private String[] content; @Column(name = "relevance_id") private Integer relevanceId; }
方式B:使用Hibernate原生配置
若不想依赖Hypersistence Utils,调整字段注解并确保方言适配:
// ... 其他字段不变 @Basic @JdbcTypeCode(SqlTypes.ARRAY) @Column(name = "intvalues", columnDefinition = "integer[]") @Type(value = org.hibernate.type.ArrayType.class) private Integer[] intvalues; @Basic @JdbcTypeCode(SqlTypes.ARRAY) @Column(name = "content", columnDefinition = "text[]") @Type(value = org.hibernate.type.ArrayType.class) private String[] content; // ... 其他字段不变
3. 修正保存代码的setter调用错误
实体类字段intvalues对应的Lombok setter方法是setIntvalues(小写v),你当前写的setIntValues(大写V)会导致字段未赋值,修正为:
mapping.setIntvalues(intArr); // 对应字段intvalues的正确setter
4. 优化Hibernate方言配置
Hibernate 6+推荐使用对应PostgreSQL版本的方言,例如PostgreSQL 15版本:
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQL15Dialect
不确定版本的话,保留PostgreSQLDialect也可,但指定具体版本能更好适配新特性。
5. 清理并重启应用
删除编译生成的target/build目录,重新编译构建,确保所有配置生效。
原因分析
- 错误的
@Converts注解:属性名与实际字段不匹配,导致Hibernate尝试处理不存在的属性,触发类型解析异常。 - 注解冲突:同时使用
@JdbcTypeCode和不匹配的@Convert,导致Hibernate类型注册表无法找到对应的DdlType,引发空指针。 - setter调用错误:虽不是本次NPE的直接原因,但会导致字段未赋值,需修正避免后续问题。
内容的提问来源于stack exchange,提问作者Angad Bansode
相关产品推荐
相关产品推荐

