Jpa在postgres中使用Smallint类型的枚举错误。

27 浏览
0 Comments

Jpa在postgres中使用Smallint类型的枚举错误。

我想在实体中使用枚举,但是在验证时遇到了一个错误,JPA希望将smallint设置为枚举。我该如何解决这个问题。\n\"Schema-validation: 在表[order]的列[status]中遇到了错误的列类型;找到[int2 (Types#SMALLINT)],但期望的是[int4 (Types#INTEGER)]\" \n图片链接:\nhttps://i.stack.imgur.com/0FntA.png\nhttps://i.stack.imgur.com/2izWA.png

0
0 Comments

问题: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版本中进行了测试,可行。

0