如何在JPA和Spring的同一个persistence.xml中使用两个不同的实体?

时间:2016-10-17 14:55:24

标签: hibernate spring-mvc jpa websphere portlet

我正在尝试构建一个Spring-MVC portlet,它通过JPA与MySQL数据库的两个不同表进行交互。我已经阅读了7个不同的帖子,这些帖子涉及到这个主题以及我得到的错误,但没有任何帮助我。如果我只使用这些表中的一个,那么程序工作正常,但如果我将另一个表添加为entity,我会收到错误。这两个实体类都由IBM JPA Tools的{​​{1}}自动生成。

我的来源:

Classes

因为Rational Application Developer几乎相同,我只发布一次代码:

*Manager.java

我的//imports @SuppressWarnings("unchecked") @JPAManager(targetEntity = entities.BookTbl.class) public class BookTblManager { private EntityManagerFactory emf; public BookTblManager() { emf = EMFProvider.getEMF(); } public BookTblManager(EntityManagerFactory emf) { this.emf = emf; } public void setEntityManagerFactory(EntityManagerFactory emf) { this.emf = emf; } private EntityManager getEntityManager() { if (emf == null) { throw new RuntimeException( "The EntityManagerFactory is null. This must be passed in to the constructor or set using the setEntityManagerFactory() method."); } return emf.createEntityManager(); } //Create, delete, update methods EntityManagerFactory Provider ):

EMFProvider.java

我的//Imports public class EMFProvider { private static EntityManagerFactory emf; private static final String project = "SpringJPASample"; public EMFProvider() { } public static synchronized EntityManagerFactory getEMF() { if (emf == null) { emf = Persistence.createEntityManagerFactory(project); } return emf; } }

persistence.xml

最后我的错误:

...
<persistence-unit name="SpringJPA">
    <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
    <class>entities.User</class>
    <class>entities.BookTbl</class>
    <properties>
        <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
        <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/portlet" />
        <property name="javax.persistence.jdbc.user" value="admin" />
        <property name="javax.persistence.jdbc.password" value="password" />
        <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
        <property name="hibernate.show_sql" value="true" />
    </properties>
</persistence-unit>
...
  

我正在使用Websphere Portal Server 8.5,Spring 4.3.2,Hibernate 5.1和JPA 2.1。

我尝试了其他帖子中提到的任何解决方案,我发现这个错误并没有任何效果。我确实想要使用两个不同的数据库而不是我想在一个类中使用这两个表。

2 个答案:

答案 0 :(得分:2)

这可能是由于WebSphere v8.5不支持JPA 2.1。它仅支持JPA 2.0 API。因此,JPA 2.0 API由WebSphere加载,并且这与用于此版本的Hibernate不足(冲突),因为它基于JPA 2.1。

如果要将JPA 2.1与WebSphere v8.5一起使用,那么您将仅限于使用应用程序管理的持久性。有关此配置和用法的更多详细信息,请访问: Websphere 8.5 with JPA 2.1

答案 1 :(得分:0)

尝试使用WebSphere Application Server中的类加载器查看器来解决类加载问题https://www.ibm.com/support/knowledgecenter/SSAW57_8.0.0/com.ibm.websphere.nd.doc/info/ae/ae/utrb_classload_viewer_service.html