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 标度对于浮点数没有意义
嗯,我的意思是,这个例外应该是不言自明的。
浮点类型没有刻度(这就是“浮点”的确切字面含义),因此这种映射不合理:
@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)
| 归档时间: |
|
| 查看次数: |
2474 次 |
| 最近记录: |