【问题标题】:JPA save BigDecimal as integer in DatabaseJPA 将 BigDecimal 保存为数据库中的整数
【发布时间】:2017-12-07 20:45:59
【问题描述】:

我在数据库中有这个字段:

ITEMCOST    NUMERIC (13)    DEFAULT 0  NOT NULL

在 JAVA 中,Entity 中的字段是这样定义的:

@Column(name = "ITEMCOST")
private BigDecimal itemCost;

这些值以整数形式存储在数据库中。最后两位是十进制值。像这样:

  • DB 100 表示 1.00
  • DB 250 表示 2.50

我想要的是当我读取实体时,值是这样加载的。 如果数据库中的值为 357,BigDeciamal 的值应为“3.57”。当我保存该实体时,该值应再次转换为 INT。

【问题讨论】:

标签: java jpa spring-data-jpa


【解决方案1】:

就像 cmets 所说,您应该使用属性转换器。

请在此处找到描述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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-23
    • 2019-11-05
    • 2018-08-03
    相关资源
    最近更新 更多