2010-08-20 15 views
12

Tengo una tabla oracle que contiene el tipo char (n) para varias columnas. Utilizo herramientas de hibernación para crear objetos de entidades y esta herramienta mapea el tipo de caracteres en Cadena.Oracle Char type e Hibernate

Pero cuando despliego mi solicitud, me sale un error porque Hibernate esperar un tipo VARCHAR2 y no un tipo char:

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

¿Qué clase de tipo Java debo utilizar para mapear char (n) escriba en una entidad ?

Gracias.

Respuesta

18

Hay un poco de información útil aquí on this blog entry.

Esencialmente lo que necesita para hacer su configuración de hibernación más específica, ya que está suponiendo un mapeo de cadena por defecto a varchar2 (30).

Puede intentar usar la anotación de @nolum (longitud = N) independiente de la base de datos (donde N es la longitud real de su columna en la base de datos). Si eso no funciona, intente utilizar el enfoque @Column (columnDefinition = "char").

+0

Muchas gracias, no había visto esta propiedad :) – Kiva

+1

No quiero hacer esto para cada columna. ¿Hay alguna manera de que pueda establecer algún mapeo para hibernar? – yousafsajjad

+0

@stark No resuelve el problema –

2

no funciona - Hibernate falla la validación del esquema:

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

funciona, ya que el atributo columnDefinition le dice a Hibernate no por defecto a VARCHAR2 como el tipo de columna, y utilizar en su lugar CHAR:

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

la columna en la base de datos se define como:

ENABLED_FLAG CHAR(1 BYTE) 
Cuestiones relacionadas