tutorial - Errores Grails 2.4 e hibernate4 con ejecución-aplicación
grails html (3)
La solución @Luis proporcionada anteriormente también funciona para MYSQL. Simplemente extienda MySQL5InnoDBDialect en su lugar como se muestra a continuación:
import org.hibernate.dialect.MySQL5InnoDBDialect;
public class ImprovedMySQLDialect extends MySQL5InnoDBDialect {
@Override
public String getDropSequenceString(String sequenceName) {
// Adding the "if exists" clause to avoid warnings
return "drop sequence if exists " + sequenceName;
}
@Override
public boolean dropConstraints() {
// We don''t need to drop constraints before dropping tables, that just leads to error
// messages about missing tables when we don''t have a schema in the database
return false;
}
}
Luego, en su archivo de fuente de datos, cambie la siguiente línea:
dialect = org.hibernate.dialect.MySQL5InnoDBDialect
a
dialect = my.package.name.ImprovedMySQLDialect
Actualicé una aplicación a Grails 2.4.0 y estoy usando el complemento hibernate4. Al ejecutar la aplicación de ejecución, los siguientes ejemplos de error se generan para cada clase de dominio utilizando la base de datos en memoria. He leído varias publicaciones en los foros de hibernación de que los errores no son graves. Simplemente está registrando un error porque la tabla que está intentando eliminar aún no existe.
2014-Mai-24 13: 25: 26,788 ERROR [localhost-startStop-1] org.hibernate.tool.hbm2ddl.SchemaExport - SchemaExport.java 425 - HHH000389: No exitoso: alterar la tabla user_role drop constraint FK_apcc8lxk2xnug8377fatvbn04 si existe
2014-Mai-24 13: 25: 26,789 ERROR [localhost-startStop-1] org.hibernate.tool.hbm2ddl.SchemaExport - SchemaExport.java 426 - No se encontró la tabla "USER_ROLE"; Instrucción de SQL: alterar la restricción de caída user_role de la tabla FK_apcc8lxk2xnug8377fatvbn04 si existe [42102-173]
¿Alguien sabe cómo detener el ruido de registro?
Simplemente configure dbCreate="update"
, y los errores desaparecerán inmediatamente.
El problema es que GORM (hibernación) está intentando eliminar tablas en el DB H2 que nunca se han creado porque el DB se crea nuevo cada vez que ejecuta la aplicación. Desafortunadamente, dbCreate está configurado para crear-soltar de forma predeterminada, lo que realmente no tiene sentido para una base de datos que se crea sobre la marcha en tiempo de ejecución.
development {
dataSource {
dbCreate = "update" // one of ''create'', ''create-drop'', ''update'', ''validate'', ''''
url = "jdbc:h2:mem:devDb;MVCC=TRUE;LOCK_TIMEOUT=10000;DB_CLOSE_ON_EXIT=FALSE"
}
Es un error, parece que puedes dejarlo así y no causará ningún problema, pero si no quieres ver el mensaje aquí hay algunas soluciones: (Editar: La opción 2 parece funcionar mejor (ver comentarios en esta publicación) )
1.- configuración singleSession de DataSource.groovy
https://jira.grails.org/browse/GRAILS-11198
2.- anulando el dialecto H2:
public class ImprovedH2Dialect extends H2Dialect {
@Override
public String getDropSequenceString(String sequenceName) {
// Adding the "if exists" clause to avoid warnings
return "drop sequence if exists " + sequenceName;
}
@Override
public boolean dropConstraints() {
// We don''t need to drop constraints before dropping tables, that just
// leads to error messages about missing tables when we don''t have a
// schema in the database
return false;
}
}