2010-02-25 3 views
0

Je ne sais pas pourquoi mais Hibernate essaie de convertir BigDecimal en une de mes colonnes. Cette colonne est définie comme Décimal (3,0) dans ma base de données DB2. Donc, il ne peut pas y avoir de BigDecimal.Hibernate lance BigDecimal au lieu de Integer

hbm.xml

<composite-id name="Id" class="db2.P5Id"> 
    .... 
    <key-property name="land" type="int"> 
     <column name="PFIELD1" precision="3"/> 
    </key-property> 
    .... 
</composite-id> 

Lorsque je tente de commettre une requête comme

sf.createQuery("from P5 where type = 1 and land in (:cs)") 
    .setParameterList("cs", cses, Hibernate.INTEGER).list() 

je reçois le ClassCastException. La collection fournie a uniquement des valeurs entières.

+1

http://stackoverflow.com/questions/2230182/hibernate-hbm2ddl-and-sql-server-long-as-column-of-numeric-data-type/2230287#2230287 – zmf

Répondre

3

Cela ressemble le « problème » discuté dans this thread et suggéré solution solution consiste à sous-classe la DB2Dialect:

import org.hibernate.dialect.DB2Dialect; 
import java.sql.Types; 

public class FixedDB2Dialect extends DB2Dialect { 

    public FixedDB2Dialect() { 
    super(); 
    registerColumnType(Types.INTEGER, "decimal($p)"); 
    registerColumnType(Types.NUMERIC, "decimal($p,$s)"); 
    registerColumnType(Types.DECIMAL, "decimal($p,$s)"); 
    } 
} 

Il y a peut-être un problème Jira avec un patch officiel, mais je ne pouvais pas trouver il.

1

Je suis curieux de savoir pourquoi votre base de données a été modélisée pour utiliser un type décimal avec une échelle de 0 plutôt qu'un type entier? Le comportement que vous voyez (et le "problème" mentionné par Pascal) est parce qu'hibernate suppose naturellement qu'un DECIMAL est un type à virgule flottante, et est dérouté quand vous le configurez pour être un int.

Est-il possible de changer le type de données en db2 en SMALLINT? Cela prendrait probablement moins de place sur le db (2 octets plutôt que 3) et serait plus logique.

Sinon, optez pour la solution de Pascal.

Questions connexes