過去幾天,我一直在牆上敲打我的頭,試圖讓這個工作,但我一直沒有能力。具有多個@PersistenceContext的@Stateless EJB的Spring等價物
我寫了一個JPA EntityManagerProvider最近使用EJB:
EntityManagerProviderBean.java
@Stateless
public class EntityManagerProviderBean {
@PersistenceContext(unitName="PU1")
private EntityManager entityManager1;
@PersistenceContext(unitName="PU2")
private EntityManager entityManager2;
public EntityManager getEntityManager() {
return (...) ? entityManager1: entityManager2;
}
}
然後當然我可以注入需要的地方像這樣的EJB:
UserFacade。 java
@Stateless
public class UserFacade {
@EJB
private EntityManagerProviderBean emProvider;
private EntityManager em = emProvider.getEntityManager();
...
}
現在我試圖用Spring來做類似的事情,使用註釋,而不用XML做任何事情。我似乎無法找出注入EntityManager的方法。我所做的任何事情都會導致NullPointerException。例如,我試圖注入的EntityManager手動而不依賴於我的EntityManagerProviderBean,像這樣:
UserFacadeSpring.java
public class UserFacadeSpring {
@PersistenceContext(unitName="PU1")
private EntityManager em;
...
}
但是這給了我一個NullPointerException。所以EntityManager根本沒有被注入,我不知道什麼是錯的。
所以基本上兩個問題:
- 我如何注入使用Spring的EntityManager?
- 如何在Spring中使用現有的EntityManagerProviderBean EJB?我需要做些什麼修改?
任何幫助在這個問題將不勝感激。正如你所看到的,我對春天來說是一個完整的新手。我試圖閱讀指南,但此刻一切都飛過了我的腦海。我其實也嘗試做了一些不完美的事情,但它也不起作用(我要麼得到NullPointerException或BeanNotFoundException,我必須使用@Component,@Bean,@Autowired註解,我認爲!)的每個組合:):
EntityManagerProviderSpring.java
@Component
public class EntityManagerProviderSpring {
@PersistenceContext(unitName="PU1")
private EntityManager entityManager1;
@PersistenceContext(unitName="PU2")
private EntityManager entityManager2;
@Bean
public EntityManager getEntityManager() {
return (...) ? entityManager1: entityManager2;
}
}
Main.java
public class Main {
public static void main(String[] args) {
ApplicationContext context = new AnnotationConfigApplicationContext(EntityManagerProviderSpring.class);
EntityManagerProviderSpring emProvider = context.getBean(EntityManagerProviderSpring.class);
EntityManager em = emProvider.getEntityManager();
...
}
謝謝!
編輯:我使用Hibernate JPA和下面是我的persistence.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
<persistence-unit name="PU1" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>...</class>
<properties>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/db1?zeroDateTimeBehavior=convertToNull"/>
<property name="javax.persistence.jdbc.user" value="pu1_username"/>
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
<property name="javax.persistence.jdbc.password" value="pu1_pwd"/>
<property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider"/>
</properties>
</persistence-unit>
<persistence-unit name="PU2" transaction-type="RESOURCE_LOCAL">
...
</persistence-unit>
</persistence>
基本上你在問,如何配置spring,s它注入多個PersistenceContext。谷歌爲「春天的兩個實體經理」。 –
謝謝,但仍然有些東西沒有道理。是否絕對需要某種描述bean的context.xml文件?我在JPA2中使用Hibernate,並且有一個persistence.xml文件,其中定義了數據源,所以我會盡管這足夠了? –
這東西是相當基本的。看看春天的文檔。 – atamanroman