gpt4 book ai didi

jpa - 如果执行 DDL 语句出错,则使 EcliseLink 失败

转载 作者:行者123 更新时间:2023-12-03 09:00:23 26 4
gpt4 key购买 nike

我们使用 EclipseLink 进行持久化,并通过设置属性 eclipselink.ddl-generation 将 EclipseLink 配置为自动创建数据库表等。至drop-and-create-tables .

这很好用,但是即使某些 DDL 语句失败,EclipseLink(以及我们的应用程序)在单元测试期间以及在实际的 Web 应用程序启动时也会愉快地继续。

当我错误地使用 @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 使其成为 fatal error ?

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

如果错误只是表已经存在(在针对现有数据库进行测试的情况下),则可以忽略某种方式的奖励积分。

最佳答案

显然,EclipseLink 无法做到这一点。

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

org.eclipse.persistence.tools.schemaframework.TableCreator.createTables()



(在页面上搜索“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 错误: Bug 356068 .

关于jpa - 如果执行 DDL 语句出错,则使 EcliseLink 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7192353/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com