thanks for this, Oscar... I'll document it somewhere on the website so it's
a bit more discoverable.

Dan



On 24 July 2013 22:44, GESCONSULTOR - Óscar Bou <[email protected]>wrote:

>
> Just to notice a DN-HSQL scale/precision potential problem for others
> working with DN and also for Estatio (at least for tests using HSQL).
>
>
> As a example, I have an Entity field declared as:
>
>         // {{ Impact (property)
>         private BigDecimal impact;
>
>         @MemberOrder(sequence = "1.2")
>         public BigDecimal getImpact() {
>                 return this.impact;
>         }
>
>         public void setImpact(final BigDecimal impact) {
>                 this.impact = impact;
>         }
>
>         // }}
>
> DataNucleus creates, at least with HSQL, the table with the field type as
> NUMERIC(19). So no decimal digits are admitted [1].
>
> That implies that when a record is inserted, a log entry similar to this
> one appears:
>
> INSER INTO ENTITY(..., IMPACT, ....) VALUES (...., 0.5, ....)
>
> But when that same record is retrieved, the log will show that a value of
> "0" is returned, instead of 0.5.
>
> The solution is to explicitly add the scale to the field like this:
>
>
>         // {{ Impact (property)
>         @Column(scale=2)
>         private BigDecimal impact;
>
>         @MemberOrder(sequence = "1.2")
>         public BigDecimal getImpact() {
>                 return this.impact;
>         }
>
>         public void setImpact(final BigDecimal impact) {
>                 this.impact = impact;
>         }
>
>         // }}
>
>
>
> On Estatio BDD tests the tables have different number of decimal places,
> due to precision of BigDecimal operations.
>
> Sure most of you already know, but there is a good tutorial on BigDecimals
> on [2].
>
> Just by annotating with @Column(scale=xxx) and setting also the scale to
> the result of a BigDecimal operation with setScale(scale, roundingMode) [3]
> has been enough for our tests.
>
> So hope this helps (and many thanks for sharing the project),
>
> Oscar.
>
> [1]
> http://hsqldb.org/doc/2.0/guide/sqlgeneral-chapt.html#sgc_numeric_types
>
> [2]
> http://www.opentaps.org/docs/index.php/How_to_Use_Java_BigDecimal:_A_Tutorial
>
> [3]
> http://www.tutorialspoint.com/java/math/bigdecimal_setscale_rm_roundingmode.htm
>
>

Reply via email to