我有一个实体:
@Entity(tableName = "products")
public class Product{
@PrimaryKey(autoGenerate = true)
private Long id;
@ColumnInfo(name = "amount")
private BigDecimal amount;
我需要将它存储在Room DB中。我无法存储BigDecimal
,因此我创建了转换器:
public static class Converters {
@TypeConverter
public BigDecimal fromString(String value) {
return value == null ? null : new BigDecimal(value);
}
@TypeConverter
public Double amountToString(BigDecimal bigDecimal) {
if (bigDecimal == null) {
return null;
} else {
return bigDecimal.doubleValue();
}
}
}
并添加到列中:
@TypeConverters(Converters.class)
@ColumnInfo(name = "amount")
private BigDecimal amount;
现在我将货币存储在双列中。我想要一个总结totalcurrency的方法:
@Query("SELECT SUM(amount) FROM products")
LiveData<Double> totalSum();
但我认为这是一种不好的方法,因为在转换时可能会丢失一些值。
我的问题:如何在ROOM DB中存储货币并返回方法?
LiveData<BigDecimal> totalSum();
Double
用作货币类型,因为它没有小数分数,而是具有二进制分数。 - Hossein Farrokhi