2010-08-20 16 views
12

Ho una tabella oracle che contiene il tipo char (n) per più colonne. Uso gli strumenti di ibernazione per creare oggetti objets e questo tipo di strumento mappa in stringa.Oracle Char type e Hibernate

Ma quando schiero la mia domanda, ottengo un errore perché Hibernate attendere un tipo varchar2 e non un tipo char:

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

Che tipo di tipo Java devo usare per mappare char (n) Digitare un'entità ?

Grazie.

risposta

18

C'è alcune informazioni utili qui on this blog entry.

In sostanza è necessario effettuare la configurazione di Hibernate più specifica, come è assumendo una mappatura stringa predefinita per VARCHAR2 (30).

Si può provare a utilizzare l'annotazione agnostica del database di @Column (length = N) (dove N è la lunghezza effettiva della colonna nel database). Se ciò non funziona, prova a utilizzare l'approccio @Column (columnDefinition = "char").

+0

Grazie mille, non avevo visto questa proprietà :) – Kiva

+1

Non voglio farlo per ogni colonna. C'è un modo in cui posso impostare alcune mappe per la sospensione. – yousafsajjad

+0

@stark Non risolve il problema –

2

non funziona - non riesce Hibernate convalida dello schema:

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

funziona, dal momento che l'attributo columnDefinition dice sospensione per non default VARCHAR2 come il tipo di colonna, e di utilizzare invece CHAR:

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

la colonna nel database è definita come:

ENABLED_FLAG CHAR(1 BYTE)