JPA - 禁用 persistence.xml 的验证

3
我正在尝试使用JPA(Hibernate)入门。总体想法是连接到遗留数据库进行复杂查询。我认为,Hibernate是这个任务的好伴侣,但是...对于刚开始,我创建了一个bean,持久化.xml和hibernate.cfg.xml配置文件以及一些在main方法中的代码行,从以下内容开始:
EntityManagerFactory emf = Persistence.createEntityManagerFactory("foo");

它读取persistence.xml文件,但是由于我与互联网断开连接,它无法读取模式文件(xsd)以验证persistence.xml,并因异常而抱怨。(在该环境中我没有persistence.xsd的本地副本)。我尝试删除schemalocation属性,但没有帮助。没有语法,没有JPA!?

是否有一种方法/技巧/解决方法可以至少禁用文档验证以解析persistence.xml?

1个回答

4

从JPA规范中提取

容器/持久化提供程序(Hibernate)必须使用persistence_1_0.xsd模式校验persistence.xml文件,并报告任何验证错误

...

持久性配置文件必须使用持久性命名空间指示持久性模式

 http://java.sun.com/xml/ns/persistence

使用版本元素来指示模式的版本,如下所示。
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
             http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
             version="1.0">

上面显示的元素 适用于 JPA 1.0,如果您正在使用 JPA 2.0,请更新到 2.0 版本。


1
在Java SE环境中,持久性提供程序必须根据persistence_1_0.xsd模式验证persistence.xml文件。如果您使用Hibernate作为持久性提供程序,则应该包含模式文件(我非常确定它存储在jar文件中)。我必须说,因为当我第一次尝试JPA时(大约4年前),我忘记了声明版本属性,你知道的(一个大头痛)。 - Arthur Ronald
真倒霉 - 我的 hibernate jars 里什么都没有 - 但有可能它们是定制版本,只包含类文件...看起来我现在得打印出模式并将其输入到另一个系统中 叹气 - Andreas Dolk
@Andreas_D 1.0提供程序包含persistence_1_0.xsd文件。我猜你正在使用JPA 2.0 persistence_2_0.xsd(对我不适用)。 - Arthur Ronald
@Arthur - 无论是版本1.0还是2.0,实际上我有一堆Hibernate(和其他)JAR文件,但它们中没有一个包含任何模式文件。标准的模式位置指向互联网URL,如果我有一个文件,我可以轻松地替换它以使用文件。因此,我想我只需编写一个虚拟模式来满足验证器的要求... - Andreas Dolk
@Arthur - 在抱怨之前 - 我不确定 '我的' hibernate3.jar 是否真的完整。'我的' hibernate 库是与 play 框架一起分发的那个。我认为我首先必须仔细检查它是否等同于我们从官方来源获得的库。但我现在无法检查。目前,我只编写了最小化的语法文件 (xsd 和 dtd),并且 JPA 已经可以正常工作了。 - Andreas Dolk
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接