Вы можете использовать двухпараметрическую версию метода createEntityManagerFactory()
.Второй аргумент (карта) может использоваться для передачи свойств, включая учетные данные, в базу данных.Поэтому вы можете передать карту с ключами javax.persistence.jdbc.user
и javax.persistence.jdbc.password
и соответствующими значениями.
Пример в вики EclipseLink демонстрирует, как этого добиться, хотя он использует классы, предоставленныеEclipseLink для этого:
import static org.eclipse.persistence.config.PersistenceUnitProperties.*;
...
Map properties = new HashMap();
// Ensure RESOURCE_LOCAL transactions is used.
properties.put(TRANSACTION_TYPE,
PersistenceUnitTransactionType.RESOURCE_LOCAL.name());
// Configure the internal EclipseLink connection pool
properties.put(JDBC_DRIVER, "oracle.jdbc.OracleDriver");
properties.put(JDBC_URL, "jdbc:oracle:thin:@localhost:1521:ORCL");
properties.put(JDBC_USER, "scott");
properties.put(JDBC_PASSWORD, "tiger");
// Configure logging. FINE ensures all SQL is shown
properties.put(LOGGING_LEVEL, "FINE");
properties.put(LOGGING_TIMESTAMP, "false");
properties.put(LOGGING_THREAD, "false");
properties.put(LOGGING_SESSION, "false");
// Ensure that no server-platform is configured
properties.put(TARGET_SERVER, TargetServer.None);
// Now the EntityManagerFactory can be instantiated for testing using:
Persistence.createEntityManagerFactory(unitName, properties);
Обратите внимание, что это также возможно сделать с помощью метода EntityManagerFactory.createEntityManager()
, который принимает свойства.Однако, если вы внимательно прочитаете пример аудита EclipseLink , вы заметите, что также создается общий пул соединений (свойства которого получены из файла persistence.xml), и что фактическое используемое соединение будет зависеть от того,Вы выполняете чтение или запись.