配置Hibernate以使用重命名的persistence.xml

时间:2011-11-10 09:34:12

标签: java hibernate jpa-2.0

我们必须重命名persistence.xml以欺骗WebSphere 7,不要使用其内置的OpenJPA。

使用Spring时很容易做到,只需指示其实体管理器工厂使用另一个位置来执行persistence.xml:

<property name="persistenceXmlLocation" value="META-INF/persistence-xxx.xml"/>

但是现在我们想在没有Spring的情况下使用普通的Hibernate / JPA,并且找不到任何方法来指定备用的persistence.xml位置。

JPA2规范没有说明任何事情......

任何线索?是否可以指示Hibernate使用重命名的persistence.xml?

==

似乎让Hibernate读取重命名的persistence.xml文件是不可能的。 在我的情况下没有必要。

2 个答案:

答案 0 :(得分:3)

据我所知,无法更改persistence.xml文件的位置。

另请查看此文档:Alternate JPA Providers in WebSphere Application Server,您似乎应该能够将Hibernate用作JPA提供程序,方法是在persistence.xml文件中指定它,并在应用程序中嵌入所需的jar文件

确保您的persistence.xml将Hibernate指定为JPA提供程序:

<persistence>
    <persistence-unit name="myapp">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>

您还应该能够通过创建共享库并使用它来配置WebSphere以使用备用持久性提供程序来实现此目的。 您可以在此处找到如何操作:Configuring the Java Persistence API (JPA) default persistence provider

修改 鉴于此答案中的评论中的信息,似乎可以通过在persistence.xml中添加这些属性来解决问题,如本文Websphere EntityManagerFactory creation problem中所示:

<property name="hibernate.transaction.manager_lookup_class"
value="org.hibernate.transaction.WebSphereExtendedJTATransactionLookup" />

<property name="hibernate.transaction.factory_class"
value="org.hibernate.transaction.CMTTransactionFactory" />

WebSphere Application Server文档中的备用JPA提供程序中也提供了相同的信息。

答案 1 :(得分:0)

persistence.xml应存在于META-INF目录中,通常与包含实体类的jar文件一起打包。我所做的是在eclipse下的单独项目中有实体clases,包含persistence.xml的META-INF目录,将其打包为jar文件,并将其包含在应用程序项目依赖项中(即WEB-INF / lib),或者直接将其部署到应用服务器。