squeryl - 将 bigDecimal 保存到数据库
Posted
技术标签:
【中文标题】squeryl - 将 bigDecimal 保存到数据库【英文标题】:squeryl - saving bigDecimal to database 【发布时间】:2013-06-30 21:48:10 【问题描述】:我正在使用 Scala 的 squeryl(版本 0.9.6-RC1 和 scala 2.10)并尝试将我的模型序列化到 H2 数据库。
我的模型类有一些字符串字段和一些 BigDecimal 类型 (scala.BigDecimal)。
我使用模型类中的 Schema.create 创建数据库模式,不幸的是 squeryl 总是为 BigDecimal 创建太小的字段,这使我的列值太长
"MULTPZ DECIMAL(20, 16) NOT NULL": "1000000.0000000000000000 (23)";
这是 squeryl 中的某种错误吗?原始值为"1000000.0000"
,并正确解析为BigDecimal。
我已经测试了上述情况,我创建了一个单独的表,其字段定义为"DECIMAL(20, 20)"
,在这种情况下,squeryl 会尝试插入"1000000.00000000000000000000 (27)"
【问题讨论】:
【参考方案1】:最简单的解决方法是覆盖架构中的defaultSizeOfBigDecimal
方法。它返回一个元组,其中包含包含 BigDecimal 的数字列的长度和比例。您还可以使用 @Column 注释在每个字段的基础上设置这些值。
【讨论】:
很好,这很有效。我尝试的第一件事是设置它并将代码与现有数据库一起使用,但这不起作用。然后我删除了模式并使用 defaultSizeOfBigDecimal 集重新创建了它。为什么会有这样的行为?? Squeryl 不处理模式演变。没有一种万能的方法来实现这一点。搜索 Squeryl 列表,您可以找到更多相关信息以及对外部库的建议。 但这是一个初始模式创建。我一直在创建一个新的数据库架构,但新的插入操作立即失败了。以上是关于squeryl - 将 bigDecimal 保存到数据库的主要内容,如果未能解决你的问题,请参考以下文章