Escaneo automático de palabras reservadas para tablas y columnas de Hibernate

Estoy tratando de usar un mapeo de Hibernate para varias bases de datos diferentes: H2, Oracle, MySql.

Cada base de datos tiene una lista diferente de palabras reservadas.

Me gustaría que Hibernate escape automáticamente a las palabras reservadas.

Sé que puedo:

  • usa los apoyos para forzar el escape (escapa todo solo para estar seguro)
  • cambie todos los identificadores, por lo que ciertamente no son palabras clave en ninguna base de datos (los hacen feos)
  • Ate el esquema a un conjunto específico de bases de datos, escapando de la unión de palabras clave (se romperá si agrego nueva base de datos a la mezcla)

¿Hay una solución más elegante?

AFAIK, Hibernate no mantiene una lista de palabras clave reservadas (por base de datos), así que creo que debería mirar el escapado del identificador de la base de datos.

Si está utilizando Hibernate 3.5+, pruebe hibernate.globally_quoted_identifiers=true para citar todos los identificadores de base de datos (esto es algo que agregaron para JPA 2.0, consulte la sección 2.13 Nomenclatura de objetos de base de datos de la especificación para la forma JPA para activar esto si está usando JPA).

Antes de la versión 3.5, Hibernate no ofrece ninguna opción de configuración para el escape global. Implementar una NamingStrategy de NamingStrategy personalizada para escapar de todo de forma transparente sería la forma recomendada.

Ver también

  • ¿Escapado de nombre de columna / tabla independiente de la base de datos?
  • HHH-2578: rediseño de la creación de SessionFactory : según tengo entendido, solucionar este problema haría posible el escape automático de palabras clave (a través de dialectos).