hibernate6抛出异常“比例对浮点数没有意义”

Jov*_*eth 3 java hibernate spring-boot

之前我用的是hibernate 5.x一切正常。

将 hibernate 更新到 6.1.7 后,项目出现异常。

我正在使用 springboot 3.0.5 并添加以下属性以在 mysql 8.0 上自动生成表:

spring.jpa.generate-ddl=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect

Run Code Online (Sandbox Code Playgroud)

我的实体喜欢:

@Data
@Entity
@Table(name = "T_TEST")
public class TPriceRange implements Serializable {
    @Id
    @Column(name = "ID", unique = true, nullable = false)
    private Integer id;

    @Column(name = "price", precision = 5, scale = 2)
    private Double price;
}
Run Code Online (Sandbox Code Playgroud)

当我启动该项目时,例外情况是:

Caused by: org.hibernate.MappingException: Unable to determine SQL type name for column 'price' of table 't_test'
    at org.hibernate.mapping.Column.getSqlTypeName(Column.java:252)
    at org.hibernate.mapping.Column.getSqlType(Column.java:314)
    at org.hibernate.tool.schema.internal.StandardTableExporter.getSqlCreateStrings(StandardTableExporter.java:99)
    ... 179 common frames omitted
Caused by: java.lang.IllegalArgumentException: scale has no meaning for floating point numbers
    at org.hibernate.dialect.Dialect$SizeStrategyImpl.resolveSize(Dialect.java:3853)
    at org.hibernate.dialect.MySQLDialect$1.resolveSize(MySQLDialect.java:108)
    at org.hibernate.mapping.Column.getColumnSize(Column.java:358)
    at org.hibernate.mapping.Column.getSqlTypeName(Column.java:248)
Run Code Online (Sandbox Code Playgroud)

好像‘秤’不能用,不知道为什么?

有人可以帮助我吗?

非常感谢!

hibernate6 标度对于浮点数没有意义

Gav*_*ing 5

嗯,我的意思是,这个例外应该是不言自明的。

浮点类型没有刻度(这就是“浮点”的确切字面含义),因此这种映射不合理:

@Column(name = "price", precision = 5, scale = 2)
private Double price;
Run Code Online (Sandbox Code Playgroud)

所以只需删除文本即可scale = 2

如果您希望此货币值具有设定的精度和小数位数,您应该使用BigDecimal代替Double,并将其映射到 SQL 类型DECIMAL(5,2)NUMERIC(5,2)。只需删除文本即可scale=2。例如:

@Column(name = "price", precision = 5, scale = 2)
private BigDecimal price;
Run Code Online (Sandbox Code Playgroud)