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