Мне нужно использовать множители единиц сохранения с различными свойствами (в моем случае базы данных MySQL и Oracle). В файле persistence.xml я определяю две разные единицы персистентности и перечисляю только классы объектов.Могу ли я установить схему перед созданием EntityManager?
свойства могут быть установлены в persitence.xml с
<properties> <property name="..." value="..." /> ...
Im делает его в классе Java, прежде чем создавать EntityManager, потому что я должен использовать различные свойства (которые я читал раньше):
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 в каждом классе Entity.
Сейчас я использую константу (означает, что это не динамически)
@Table(name="MYTABLE", schema = Constants.ORACLE_SCHEMA)
Я хочу использовать
@Table(name="MYTABLE")
и установить схему как свойство
dbProperties.put(...)
ли есть такая собственность?
На моем поиске я нашел синтаксис, который мог бы помочь
ALTER SESSION SET CURRENT_SCHEMA=MYSCHEMA
Но я не знаю, как совместить его с EntityManager.
Я уже спросил о всех доступных свойствах here, но ничего не смог найти.
Заранее спасибо.
Не могли бы вы связать схему с пользователем, а затем выбрать пользователя на основе схемы, которую вы хотели использовать? – Chris
Возможно, это решит проблему, но в Tomcat и Weblogic есть что-то, называемое «InitSql», которое позволяет запускать некоторый SQL после того, как соединение с базой данных проверено. Затем решение должно привязать схему к пулу jdbc. Надеюсь, это поможет. – rjdkolb
@Chris. Вы можете запускать запрос ALTER SESSION SET CURRENT_SCHEMA каждый раз, когда вам нужно изменить схему (потому что она работает после создания EntityManager) или создать разные EntityManager для каждого пользователя (?). –