Parece que el objeto org.hibernate.cfg.Configuration se puede usar para realizar la validación mediante programación llamando al método validateSchema. Sin embargo, este método necesita objetos dialect y databaseMetadata. Estoy usando Spring y puedo acceder al objeto AnnotationSessionFactoryBean desde el contexto de primavera. Hasta ahora tengo el siguiente código:¿Cómo validar el esquema de la base de datos mediante programación en hibernación con anotaciones?
AnnotationSessionFactoryBean factory = null;
factory = (AnnotationSessionFactoryBean) context.getBean("AnnotationSessionFactory");
Configuration configuration = factory.getConfiguration();
//the following line does not work, ConnectionHelper hierarchy is not visible outside the package
ConnectionHelper connectionHelper =
new ManagedConnectionProviderConnectionHelper(factory.getHibernateProperties());
Dialect dialect = Dialect.getDialect(factory.getHibernateProperties());
Connection connection = null;
DatabaseMetadata databaseMetadata = null;
try {
databaseMetadata = new DatabaseMetadata(connection, dialect);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
configuration.validateSchema(dialect, databaseMetadata);
¿Estoy en el camino correcto? La jerarquía de ConnectionHelper no está visible fuera del paquete, por lo que no puedo obtener el objeto de conexión de esa manera, para construir DatabaseMetadata. ¿Cómo puedo implementar esto?
EDIT: Creo que he hecho algunos progresos. Hay una clase SchemaValidator. El código ahora se ve así:
AnnotationSessionFactoryBean factory = context.getBean("&AnnotationSessionFactory");
Configuration configuration = factory.getConfiguration();
SchemaValidator validator = new SchemaValidator(configuration);
validator.validate();
Howerver, ahora estoy consiguiendo el error siguiente:
org.hibernate.HibernateException: Sin fuente de datos locales que se encuentran para la configuración - propiedad 'dataSource' se debe establecer en LocalSessionFactoryBean