How do I map a BigDecimal in Hibernate so I get back the same scale I put in?

风流意气都作罢 提交于 2019-11-28 08:49:47
DuncanKinnear

Just for informational sake, I can tell you that the creation of the BigDecimal coming back from the database is done by the proprietary JDBC driver's implementation of the 'getBigDecimal' method of the database-specific 'ResultSet' sub-class.

I found this out by stepping thru the Hibernate source code with a debugger, while trying to find the answer to my own question.

I think this will work, I didn't test it though.

public class BigDecimalPOJO implements Serializable {

    private static final long serialVersionUID = 8172432157992700183L;

    private final int SCALE = 20;
    private final RoundingMode ROUNDING_MODE = RoundingMode.CEILING;
    private BigDecimal number;

    public BigDecimalPOJO() {

    }

    public BigDecimal getNumber() {
        return number.setScale(SCALE, ROUNDING_MODE);
    }

    public void setNumber(BigDecimal number) {
        this.number = number.setScale(SCALE, ROUNDING_MODE);
    }
}

Not sure, but you can check equality using a.compareTo(b) == 0.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!