我在数据库中有这个字段:
ITEMCOST NUMERIC (13) DEFAULT 0 NOT NULL
在JAVA中,Entity中的字段定义如下:
@Column(name = "ITEMCOST")
private BigDecimal itemCost;
这些值作为整数存储在数据库中。其中最后两位数字是十进制值。像这样:
- DB 100 表示 1.00
- DB 250 表示 2.50
- 等等
我想要的是当我读取实体时,值会像这样加载。 如果数据库中的值为 357,则 BigDecimal 的值应为“3.57”。当我保存该实体时,该值应再次转换为 INT。
最佳答案
正如评论所说,您应该使用属性转换器。
请在此处查找说明 https://www.thoughts-on-java.org/jpa-21-how-to-implement-type-converter/
它可能看起来像这样:
@Converter
public class BigDecimalConverter implements AttributeConverter<BigDecimal, Long> {
@Override
public Long convertToDatabaseColumn(BigDecimal value) {
if (value == null) {
return null;
} else {
return value.multiply(BigDecimal.valueOf(100)).longValue();
}
}
@Override
public BigDecimal convertToEntityAttribute(Long value) {
if (value == null) {
return null;
} else {
return new BigDecimal(value).divide(BigDecimal.valueOf(100));
}
}
}
然后您可以在您的实体中使用它
@Convert(converter = BigDecimalConverter.class)
@Column(name = "ITEMCOST")
private BigDecimal itemCost;
关于java - JPA 将 BigDecimal 作为整数保存在数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47703481/