2013-10-14 150 views
1

我有一個用例,我想我需要兩個實體管理器,它們訪問相同的持久性單元。所以基本上我想在同一個數據庫上有兩個持久化上下文。這可能通過@PersistenceContext註釋嗎?容器管理的EntityManager:單個持久性單元的多個管理器?

我想寫如下內容,但不知道如何告訴JPA注入兩個不同的管理器實例。

@PersistenceContext(type = PersistenceContextType.EXTENDED) 
private EntityManager entityManager; 

@PersistenceContext(type = PersistenceContextType.EXTENDED) 
private EntityManager otherEntityManager; 

我想我可以切換到應用程序管理的事務,然後我可以使用工廠創建另一個事務。但如果不是絕對必要的,我不想自己管理交易。

回答

2

你的陳述中有些含糊不清。你是否只使用了一個「持久單位」?它與通過使用單個數據源進行約束不同。

您可以爲單個數據源創建多個持久單元。所以,如果你沒有被持久單元的數量限制,您可以創建,您可以在persistence.xml中聲明2個持久的單位爲同一數據源像下面

<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="2.0" 
    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_2_0.xsd"> 

    <persistence-unit name="PU1" 
     transaction-type="JTA"> 
     <jta-data-source>jdbc/myDS</jta-data-source> 
     <!-- Other properties --> 
    </persistence-unit> 

    <persistence-unit name="PU2" 
     transaction-type="JTA"> 
     <jta-data-source>jdbc/myDS</jta-data-source> 
     <!-- Other properties --> 
    </persistence-unit> 
</persistence> 

然後,您可以創建2個entitymanagers像下面

@PersistenceContext(unitName="PU1", type = PersistenceContextType.EXTENDED) 
private EntityManager entityManager; 

@PersistenceContext(unitName="PU2", type = PersistenceContextType.EXTENDED) 
private EntityManager otherEntityManager; 

希望這會有所幫助。

相關問題