我手动定义sql架构并在其上使用JPA 2.0来使用架构。我不允许JPA为我的应用程序创建/创建andy架构。 虽然这样做,我正在使用hibernate befor,如下所述的属性
<property name="hibernate.hbm2ddl.auto" value="validate"/>
用于验证表定义是否与定义的JPA有效,如果找不到应用服务器,则在找到表和JPA之间不匹配时。
现在我正在转向eclipse链接,我有
<property name="eclipselink.ddl-generation" value="none" />
所以Eclipse链接再次没有生成任何模式,但似乎没有相当于hibernate中的验证。
如果我的JPA定义了一个额外的列并且表没有定义,那么Web应用程序也会正常运行,只有在第一次插入发生时,验证失败并抛出异常,如图所示。
Caused by: java.sql.SQLSyntaxErrorException: 'OTHERNAME' is not a column in table or VTI 'APP.BSREQUEST'.
如何在启动期间进行Web应用程序持久性检查并验证事情是否正确,而不是等待第一次插入/删除发生时。
是否有相当于 在eclipse链接中我可以使用。
我尝试使用此功能,但这没有帮助,验证仍然发生在第一次persit / delete操作期间。
<property name="eclipselink.orm.validate.schema" value="true"/>
任何人都对此有好主意吗?
答案 0 :(得分:1)
在运行时,EclipseLink不会读取数据库元数据。您启用的eclipselink.orm.validate.schema属性会打开JPA orm.xml文件的XML架构验证。
对于出色的设计时映射/架构/ Java验证,您可以使用作为Dali Java Persistence tools分布和Eclipse IDE for Java EE Developers分发的JPA工具(Oracle Enterprise Pack for Eclipse)。
Dali会告诉您是否要映射到不存在的列,并提供集成的架构代码完成和丰富的编辑器,您可以使用它们来纠正错误。
答案 1 :(得分:0)
没有持久性单元属性,但EclipseLink通过IntegrityChecker支持此功能。这可以通过SessionCustomizer启用。