当前位置: 首页 > 知识库问答 >
问题:

运行应用程序的Grails 2.4和hibernate4错误

陈茂
2023-03-14

我把一个应用升级到了Grails 2.4.0,我用的是hibernate4插件。执行run-app时,使用内存数据库为每个域类生成以下错误示例。我在hibernate论坛上看过几个帖子,这些错误并不严重。它只是记录一个错误,因为它试图删除的表尚不存在。

2014-Mai-24 13:25:26,788 错误 [本地主机启动停止-1] 组织.Hibernate.tool.hbm2ddl.模式导出 - 模式导出.java 425 - HHH000389:不成功:更改表user_role删除约束FK_apcc8lxk2xnug8377fatvbn04(如果存在)

2014-Mai-24 13:25:26,789 ERROR[localhost]org.hibernate.tool.hbm2ddl.SchemaExport-SchemaExport.java426-找不到表"USER_ROLE";SQL语句:更改表user_role删除约束FK_apcc8lxk2xnug8377fatvbn04如果存在[42102-173]

有人知道如何停止伐木噪音吗?

共有3个答案

卫嘉言
2023-03-14

只需设置< code>dbCreate="update",错误就会立即消失。

问题是GORM(hibernate)试图删除H2数据库中从未创建过的表,因为每次运行应用程序时都会新建数据库。不幸的是,dbCreate默认设置为create-drop,这对于在运行时动态创建的数据库来说确实没有意义。

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"
    }
葛磊
2023-03-14

上面提供的解决方案@Luis也适用于MYSQL。只需扩展MySQL5InnoDBDialect,如下所示:

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;
    }
}

然后在您的数据源文件中更改以下行:

dialect = org.hibernate.dialect.MySQL5InnoDBDialect

dialect = my.package.name.ImprovedMySQLDialect
鲁涵映
2023-03-14

这是一个错误,似乎你可以这样做,不会造成任何问题,但如果你不想看到消息,这里有一些解决方案:(编辑:选项2似乎工作得更好(请参阅这篇文章中的评论))

1.-单会话配置从DataSource.groovy

https://jira.grails.org/browse/GRAILS-11198

2.- 覆盖 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;
    }
}

不成功:在Hibernate/JPA/HSQLDB独立中更改表XXX删除约束YYY

 类似资料:
  • 问题内容: 我已经将应用程序升级到Grails 2.4.0,并且正在使用hibernate4插件。执行运行应用程序时,会使用内存数据库为每个域类生成以下错误示例。我已经在hibernate论坛上阅读了几则帖子,这些错误并不严重。它只是记录一个错误,因为它要删除的表尚不存在。 2014-Mai-24 13:25:26,788错误[localhost-startStop-1] org.hibernat

  • 每当我尝试运行我的应用程序时,屏幕截图中的窗口就会弹出。声明找不到默认活动,因此我无法部署我的应用程序: 我的代码清单文件 这就是我点击运行时得到的窗口- 我的代码的Gradle文件:

  • 我对Spring靴不熟悉。任何时候我运行我的Spring启动应用程序,我得到错误。需要帮助运行我的Spring启动应用程序。 错误信息:白标签错误页 此应用程序没有/error的显式映射,因此您将其视为回退。 2016年10月10日星期一10:39:54 WAT出现意外错误(类型=未找到,状态=404)。没有可用的消息 代码:

  • 我看到了其他相关问题,但对解决方案不满意。 我已经根据我的要求对上面的教程做了我自己的修改,像使用城市,国家实体而不是学生。 我的beans.xml是这样的 和CountryJDBCTemplate.java如下所示: 2013年12月11日下午1:06:02 org.springframework.context.support.classpathxmlapplicationcontext准备r

  • 错误如下: 02-11 13:24:31.561 526 2-5262/?E/AndroidRuntime:致命异常:main process:com.example.vicky.project,pid:5262 java.lang.runtimeException:无法启动活动ComponentInfo{com.example.vicky.project/com.example.vicky.pr

  • 例如。 这应该运行一个简单的hello world应用程序,摘自oracle文档。然而,当我‘运行’这个代码,没有窗口打开。取而代之的是打开一个名为“Java”的应用程序。看起来'java'只是一个位于'jdk1.8.0_25.jdk/contents/home/bin'中的'UNIX可执行文件‘。应用程序'java'绝对不显示任何东西,并且在没有强制退出的情况下无法关闭。 我在MacBook上运