Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jpa 如果执行DDL语句时出错,则使EcliseLink失败_Jpa_Error Handling_Integration Testing_Eclipselink - Fatal编程技术网

Jpa 如果执行DDL语句时出错,则使EcliseLink失败

Jpa 如果执行DDL语句时出错,则使EcliseLink失败,jpa,error-handling,integration-testing,eclipselink,Jpa,Error Handling,Integration Testing,Eclipselink,我们使用EclipseLink进行持久化,并通过将EclipseLink.ddl-generation属性设置为删除和创建表,将EclipseLink配置为自动创建数据库表等 这很好,但是EclipseLink和我们的应用程序将在单元测试期间愉快地继续运行,并且在实际的web应用程序启动时,即使一些DDL语句失败 当我错误地使用@Index注释时,我注意到了这一点,并想知道为什么没有创建索引,直到我在日志中注意到: org.eclipse.persistence.exceptions.Datab

我们使用EclipseLink进行持久化,并通过将EclipseLink.ddl-generation属性设置为删除和创建表,将EclipseLink配置为自动创建数据库表等

这很好,但是EclipseLink和我们的应用程序将在单元测试期间愉快地继续运行,并且在实际的web应用程序启动时,即使一些DDL语句失败

当我错误地使用@Index注释时,我注意到了这一点,并想知道为什么没有创建索引,直到我在日志中注意到:

org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: org.h2.jdbc.JdbcSQLException: 
Column "MY_INDEX_FLD" not found; SQL statement:
CREATE INDEX X_INDEX ON X (MY_INDEX_FLD)
我真的很想知道这是否会发生。如果某些DDL语句失败,有没有办法告诉EclipseLink使其成为致命错误

在这种情况下,我希望至少让我们的JUnit集成测试失败


在针对现有数据库进行测试时,如果错误仅仅是表已经存在,那么可以通过某种方式忽略这些额外的点。

显然,EclipseLink无法做到这一点

我查看了EclipseLink中创建表的方法:

在页面上搜索createTables

我包含以下行:

        try {
            schemaManager.createObject(table);
            session.getSessionLog().log(SessionLog.FINEST,
                "default_tables_created", table.getFullName());
        } catch (DatabaseException ex) {
            session.getSessionLog().log(SessionLog.FINEST,
            "default_tables_already_existed", table.getFullName());
                if (!shouldIgnoreDatabaseException()) {
                    throw ex;
                }
        }
显然,EclipseLink假设表和索引创建过程中的错误总是由已经存在的表引起的:-

我为此提交了一个EclipseLink错误: