I'm using Hibernate as our Object-Relational Mapping, with a custom dialect for an obscure database.
The Entity I'm retrieving from this database has a column thus:
@Column(name = "GROSS_WEIGHT", precision = 9, scale = 3)
private BigDecimal grossWeight;
The database has this column defined as numeric with a precision of 9 and a scale of 3.
I can see the SQL that Hibernate generates to retrieve the data, and when I perform the same Query using the database query tool it returns '9.68' for the GROSS_WEIGHT column.
However, in the Entity that is retrieved by Hibernate, the 'grossWeight' field contains the value '10', with a scale
of 0 and precision
of 2!
in the custom dialect class I'm using I've tried overriding the following Column Types:
registerColumnType( Types.DECIMAL, "numeric($p,$s)" );
registerColumnType( Types.DOUBLE, "numeric($p,$s)" );
registerColumnType( Types.NUMERIC, "numeric($p,$s)" );
but it stills returns just the (rounded) whole number.
This has worked elsewhere in the application where we retrieve objects from Postgres using the Postgres dialect.
Any idea what I should be doing in the dialect so I can get Hibernate to correctly set the precision/scale of the BigDecimal retrieved?
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…