3

我正在手动定义 sql 模式并在其之上使用 JPA 2.0 来使用该模式。我不允许 JPA 为我的应用程序生成/创建 andy 模式。在这样做的同时,我在下面提到的属性中使用了休眠之前

<property name="hibernate.hbm2ddl.auto" value="validate"/>

用于根据定义的 JPA 验证表定义是否有效,如果不是,则应用服务器在发现表和 JPA 之间不匹配时没有出现。

现在我正在移动到 Eclipse 链接,我有

<property name="eclipselink.ddl-generation" value="none" />

所以 Eclipse 链接再次没有生成任何模式,但似乎没有与我们在休眠中的验证等效。

如果我的 JPA 定义了一个额外的列并且表没有定义,那么 Web 应用程序也可以正常运行,只有当表的第一次插入发生时,验证失败并抛出异常,如图所示。

Caused by: java.sql.SQLSyntaxErrorException: 'OTHERNAME' is not a column in table or VTI 'APP.BSREQUEST'.

如何让 Web 应用程序持久性检查并验证启动期间是否正确,而不是等待第一次插入/删除发生时。

是否有相当于我可以使用的 eclipse 链接。

我尝试使用它,但这并没有帮助,验证仍然发生在第一次持久/删除操作期间。

<property name="eclipselink.orm.validate.schema" value="true"/>

有人对此有好主意吗?

4

2 回答 2

1

在运行时,EclipseLink 不读取数据库元数据。您启用的 eclipselink.orm.validate.schema 属性打开 JPA orm.xml 文件的 XML 模式验证。

要获得出色的设计时映射/模式/Java 验证,您可以使用 JPA 工具(Dali Java Persistence 工具),它作为Eclipse IDE for Java EE Developers发行版和Oracle Enterprise Pack for Eclipse的一部分提供。

如果您正在映射到不存在的列,Dali 会告诉您,并提供集成的模式代码完成和丰富的编辑器,您可以使用它们来纠正错误。

于 2013-03-05T15:14:56.293 回答
0

没有持久性单元属性,但 EclipseLink 确实通过 IntegrityChecker 支持这一点。这可以通过 SessionCustomizer 启用。

于 2013-03-05T15:44:10.823 回答