2010-02-18 34 views
8

Tengo un modelo de datos JPA/Hibernate que estoy usando la herramienta hbm2ddl de Hibernate para generar DDL en la base de datos. Tengo algunas cadenas que deberían ser CHAR y algunas que pueden ser VARCHAR en la base de datos. Quiero minimizar la edición manual del DDL (me doy cuenta de que algo tendrá que suceder).Generación JPA/Hibernate DDL; CHAR vs. VARCHAR

¿Alguien sabe cómo debería hacerlo? Me doy cuenta de que puedo hacer todas las cadenas VARCHARS o CHARS a través de un dialecto pirateado, pero eso no es lo que siempre es apropiado en la base de datos.

Me gustaría poder hacer esto con anotaciones o aop, evitando el texto personalizado de definición de columnas en mis clases.

Gracias.

Respuesta

4

Por lo tanto, finalmente encontré que puede especificar un límite de longitud para un tipo en el dialecto. Por lo tanto, he decidido que cualquier cosa bajo una longitud de 10 debe ser carbón y cualquier cosa más que debe ser varchar:

registerColumnType(Types.VARCHAR, 10, "char($l)"); 

Eso no es exactamente lo que yo quería, pero que es lo suficientemente bueno. Triste que no lo encontré antes.

11

Anota las cadenas que deseas asignar a un CHAR en la base de datos con .

+1

Gracias por su respuesta, pero en mi último párrafo, lo menciono. Estoy tratando de evitar el uso de columnDefinition. Solo esperaba que hubiera una mejor manera, ya que esto parecía ser una necesidad razonable. –

+0

No hay mucha diferencia entre agregar una anotación o agregar un atributo de anotación. – mtpettyp

+1

Ah, pero la diferencia es el contenido del atributo. Eso es texto puesto directamente en el esquema ddl, por lo tanto, inherentemente base de datos específica. Además, tengo que duplicar la longitud de la columna en el texto. Esta instancia particular no es tan mala, pero vale la pena evitarla si puedo. Sin embargo, no parece prometedor, debo admitirlo. –