2013-03-05 50 views
3

我正在手动定义sql模式,并在其上使用JPA 2.0来使用模式。我不允许JPA为我的应用程序创建/创建架构。 这样做虽然我使用休眠befor在至极财产低于在eclipse链接中的休眠等效hibernate.hbm2ddl.auto =验证

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

用于验证,如果表定义是有效accoridng来定义的JPA和提到如果没有应用程序服务器没上来时,发现表和JPA之间的不匹配。

现在我迁移到Eclipse的链接和我有

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

使Eclipse的链接再次不产生任何模式,但似乎没有被验证的等效我们有休眠。

如果我的JPA有一个额外的colum定义,并且表没有,那么web应用程序也会正常运行,它只有当第一次插入发生验证失败的表并且引发异常时才会如图所示。

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

我怎样才能让Web应用程序持久性检查和验证,如果事情是在启动过程中正确的,而不是等待,当第一插入/删除发生。

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

我试过使用这个,但这没有帮助,验证仍然发生在第一个persit /删除操作。

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

任何人都有这个好主意?

回答

1

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

优秀设计时映射/模式/ Java的验证可以使用JPA工具(在Dali Java Persistence tools)该船舶为Eclipse IDE for Java EE Developers分布和Oracle Enterprise Pack for Eclipse的一部分。

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

+0

'eclipselink.orm.validate.schema'属性的好处。但达利真的不是一个好的选择。您很少有权访问生产数据库。预先验证架构的目的是为了能够阻止应用程序自行启动并立即看到架构不是最新的。 – 2014-03-05 07:35:53

0

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