【发布时间】:2014-02-05 04:31:41
【问题描述】:
我使用 Hibernate 作为我们的对象-关系映射,并为不知名的数据库使用自定义方言。
我从这个数据库中检索的实体有一个列:
@Column(name = "GROSS_WEIGHT", precision = 9, scale = 3)
private BigDecimal grossWeight;
数据库将此列定义为精度为 9 和小数位数为 3 的数字。
我可以看到 Hibernate 为检索数据而生成的 SQL,当我使用数据库查询工具执行相同的查询时,它会为 GROSS_WEIGHT 列返回“9.68”。
但是,在 Hibernate 检索的实体中,“grossWeight”字段包含值“10”,scale 为 0,precision 为 2!
在我使用的自定义方言类中,我尝试覆盖以下列类型:
registerColumnType( Types.DECIMAL, "numeric($p,$s)" );
registerColumnType( Types.DOUBLE, "numeric($p,$s)" );
registerColumnType( Types.NUMERIC, "numeric($p,$s)" );
但它仍然只返回(四舍五入的)整数。
这在我们使用 Postgres 方言从 Postgres 检索对象的应用程序的其他地方也起作用。
知道我应该在方言中做什么,以便让 Hibernate 正确设置检索到的 BigDecimal 的精度/比例吗?
【问题讨论】:
标签: java hibernate jpa hibernate-mapping bigdecimal