Pri*_*imk 6 persistence jpa entitymanager ejb-3.0
在标准EJB 3中,当注入实体管理器时,持久性单元(指数据源)被硬编码到注释中:(或者xml文件)
@PersistenceContext(unitName = "myunit")
private EntityManager entityManager;
有没有办法使用实体管理器,但在运行时按名称选择数据源?
小智 5
使用EclipseLink,您可以设置在应用服务器中配置的DataSource.
import org.eclipse.persistence.config.PersistenceUnitProperties;
...
....
Map props = new HashMap();  
props.put(PersistenceUnitProperties.JTA_DATASOURCE, "dataSource");  
EntityManagerFactory  emf = Persistence.createEntityManagerFactory("UNIT_NAME", props);
EntityManager em = emf.createEntityManager();
PU_NAME指文件中使用的名称persistence.xml 
dataSource将应用程序服务器中用于jdbc资源的名称称为"jdbc/sample"
Run Code Online (Sandbox Code Playgroud)<persistence-unit name="UNIT_NAME" transaction-type="JTA"> <provider>PERSISTENCE_PROVIDER</provider> <jta-data-source>java:DATA_SOURCE_NAME</jta-data-source> </persistence-unit> -- other units
现在,在运行时,您可以为所需的持久性单元构建实体管理器。为每个数据源创建单独的持久性单元。
//---
EntityManagerFactory emf = Persistence.createEntityManagerFactory(persistenceUnitName);
EntityManager em = emf.createEntityManager();
//---
Run Code Online (Sandbox Code Playgroud)createEntityManagerFactory(persistenceUnitName,propertiesMap);
这将使用给定的属性为指定的持久性单元创建并返回 EntityManagerFactory。因此,您可以在运行时相应地更改属性。
| 归档时间: | 
 | 
| 查看次数: | 19928 次 | 
| 最近记录: |