【发布时间】:2016-03-14 18:25:19
【问题描述】:
我需要使用具有不同属性的多重持久性单元(在我的例子中是 MySQL 和 Oracle 数据库)。在persistence.xml 中,我定义了两个不同的“persistence-unit”并只列出了那里的实体类。
可以在 persitence.xml 中设置属性
<properties>
<property name="..." value="..." />
...
我在创建 EntityManager 之前在 java 类中执行此操作,因为我必须使用不同的属性(我之前读过):
EntityManagerFactory factory;
...
HashMap<String, String> dbProperties = new HashMap<String, String>();
dbProperties.put("javax.persistence.jdbc.driver", driver);
dbProperties.put("javax.persistence.jdbc.url", url);
dbProperties.put("javax.persistence.jdbc.user", user);
dbProperties.put("javax.persistence.jdbc.password", password);
dbProperties.put("eclipselink.ddl-generation", "none");
dbProperties.put("eclipselink.ddl-generation.output-mode", "database");
factory = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME, dbProperties);
EntityManager em = factory.createEntityManager();
...
对于 Oracle,我需要动态设置架构(如果可能),而不是在每个实体类的 @Table 注释中硬编码。
现在我使用的是一个常量(意味着它不是动态的)
@Table(name="MYTABLE", schema = Constants.ORACLE_SCHEMA)
我想用
@Table(name="MYTABLE")
并将架构设置为属性
dbProperties.put(...)
有这样的属性吗?
在我的搜索中,我发现了一种可以提供帮助的语法
ALTER SESSION SET CURRENT_SCHEMA=MYSCHEMA
但我不知道如何将它与EntityManager结合起来。
我已经询问了所有可用的属性here,但还没有找到任何东西。
提前谢谢你。
【问题讨论】:
标签: java oracle jpa eclipselink entitymanager