I have a problem with the mapping of Oracle Float double precision datatype to Java Double datatype. The hibernate schema validator seems to fail when the Java Double dataty
Unless you define a column type as double precision
in DDL file, Oracle will convert it to float
column type. So you need to register double as float column type in dialect class.
public class Oracle10gDialectExtended extends Oracle10gDialect {
public Oracle10gDialectExtended() {
super();
registerColumnType(Types.DOUBLE, "float");
}
}
Finally register Oracle10gDialectExtended
in Hibernate/JPA configuration as hibernate.dialect
.
I had a case where my Oracle column type was NUMBER
and the Java type was double
.
Finally traced that it was down to settings
<property name="hbm2ddl.auto">validate</property>
just changed it to
<property name="hbm2ddl.auto">update</property>
and everything worked!
We had the same issue. We solved it by making sure to explicity set the column type in the mapping, like this:
<property name="performance" type="double">
<column name="PERFORMANCE" sql-type="float" />
</property>
Need more info. The table is Double? I'm not familiar with Oracle, but is that a floating point type? What java.sql.Types
type does it translate to? You can see the java.sql.Types
to database type mapping in the dialect class for your database. In this case it is org.hibernate.dialect.Oracle10gDialect
(which extends 9i and 8i). Looks like you have
registerColumnType( Types.DOUBLE, "double precision" );
So, the table needs to be defined as double precision
, and the java class needs to be defined as something that will map to Types.Double
, usually double
.
From the error message, it looks like your table is defined as float
which would use this mapping
registerColumnType( Types.FLOAT, "float" );
for which the expected java type would be something that maps to Types.FLOAT
, usually float
; a single precision value.
The easiest thing to do is either change your table or java class to match. Alternately, you can specify a user type that would map a single precision value to a double precision value; I can't think of why you would really want to do that, but maybe if you didn't have control over both the class and the table, which is quite rare, I would think.
hth.
I had this issue when migrating a jboss 4/hibernate 3 app to as7/hibernate4. Problem solved by Rob Keilty's suggestion of changing hbm2ddl.auto from validate to update without having to change legacy code.
After lots of research and tries i found the solution of it. For Grails domain we can fix this problem by adding the sqlType as "float" for validation mode.
In Result.groovy
class Result{
Double discount
static mapping = {
discount column: "discount", sqlType: "float"
}
static constraints = {
discount(nullable: true)
}
}
So it will remove the error in validation mode.