2010-08-20 3 views
12

J'ai une table oracle qui contient le type char (n) pour plusieurs colonnes. J'utilise les outils de mise en veille prolongée pour créer des objets d'entités et ce type de char de mappe d'outils dans String.Oracle Char type et Hibernate

Mais quand je déploie ma demande, je reçois une erreur parce que Hibernate attendre un type varchar2 et non un type char:

Wrong column type in ARBOR.CMF for column CHG_WHO. Found: char, expected: varchar2(30 char) 

Quel genre de type java dois-je utiliser pour carte char (n) de type dans une entité ?

Merci.

Répondre

18

Il y a des informations utiles ici on this blog entry.

Essentiellement, vous devez faire la configuration de votre mise en veille prolongée plus spécifique, car il est en supposant un mappage de chaîne par défaut à varchar2 (30).

Vous pouvez essayer d'utiliser l'annotation indépendante de la base de données de @Column (longueur = N) (où N correspond à la longueur réelle de votre colonne dans la base de données). Si cela ne fonctionne pas, essayez d'utiliser l'approche @Column (columnDefinition = "char").

+0

Merci beaucoup, je n'avais pas vu cette propriété :) – Kiva

+1

Je ne veux pas faire cela pour chaque colonne. Est-il possible que je peux définir un mappage pour Hibernate. – yousafsajjad

+0

@stark Ne résout pas le problème –

2

ne fonctionne pas - échoue la validation du schéma Hibernate:

@Column(name="ENABLED_FLAG", length=1) 
private String enabledFlag; 

fonctionne, puisque le lieu attribut columnDefinition indique à Hibernate pas par défaut VARCHAR2 comme type de colonne, et d'utiliser CHAR:

@Column(name="ENABLED_FLAG", length=1, columnDefinition="CHAR") 
private String enabledFlag; 

la colonne dans la base de données est définie comme:

ENABLED_FLAG CHAR(1 BYTE) 
Questions connexes