簡體   English   中英

容器管理的EntityManager:單個持久性單元的多個管理器?

[英]Container-managed EntityManager: multiple managers for single persistence unit?

我有一個用例,其中我需要兩個實體管理器,它們訪問同一持久性單元。 所以從本質上講,我希望在同一數據庫上具有兩個持久性上下文。 是否可以通過@PersistenceContext批注?

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

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

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

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

您的陳述中含糊不清。 您是否只使用一個“持久性單元”來約束自己? 它與使用單一數據源的約束不同。

您可以為單個數據源創建多個持久性單元。 因此,如果您不受可以創建的持久性單元數量的限制,則可以在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個實體經理,如下所示

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

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

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM