Jpa在postgres中使用Smallint类型的枚举错误。
问题:Jpa枚举类型与PostgreSQL中的Smallint类型发生错误。
原因:Jpa默认将枚举类型映射为PostgreSQL中的整型(Integer)类型,而Smallint类型在PostgreSQL中是一个16位的整型。因此,当Jpa尝试将一个枚举类型的值映射到Smallint类型的字段时,会发生类型不匹配的错误。
解决方法:在实体类的枚举类型字段上添加columnDefinition="int2",将其映射为Smallint类型。
@Enumerated(EnumType.STRING) @Column(name = "status", columnDefinition = "int2") private OrderStatus status;
这样,当Jpa将枚举类型的值映射到数据库时,会将其转换为Smallint类型,避免了类型不匹配的错误。
此解决方法已在Spring Boot 2.2.10版本中进行了测试,可行。