Я пытаюсь получить экземпляр java.sql.Connection
с EntityManager.unwrap
в JPA-переносном режиме с Hibernate 5.2.5.Final.JPA 2.1-переносимый способ получить экземпляр Connection из Hibernate?
Class<?> databaseDriver = EmbeddedDriver.class;
File databaseDir = File.createTempFile(NewClass.class.getSimpleName(), null);
FileUtils.deleteQuietly(databaseDir);
LOGGER.info(String.format("using '%s' as database directory", databaseDir.getAbsolutePath()));
String databaseURL = String.format("jdbc:derby:%s", databaseDir.getAbsolutePath());
Connection connection = DriverManager.getConnection(String.format("%s;create=true", databaseURL));
connection.close();
EntityManagerFactory entityManagerFactory = null;
EntityManager entityManager = null;
try {
Map<Object, Object> properties = new HashMap<>();
properties.put("javax.persistence.jdbc.url", databaseURL);
properties.put("javax.persistence.jdbc.driver", databaseDriver.getName());
entityManagerFactory = Persistence.createEntityManagerFactory("richtercloud_hibernate-missing-escape-chars_jar_1.0-beta2PU",
properties);
entityManager = entityManagerFactory.createEntityManager();
entityManager.getTransaction().begin();
connection = entityManager.unwrap(java.sql.Connection.class);
//do something with connection...
}finally {
if(entityManager != null) {
entityManager.close();
}
if(entityManagerFactory != null) {
entityManagerFactory.close();
}
}
, который не выполнен из-за Exception in thread "main" javax.persistence.PersistenceException: Hibernate cannot unwrap interface java.sql.Connection
. Он отлично работает в Eclipselink 2.6.4.
Я знаю о возможности (unportable) развернуть Hibernate Session
и получить от него Connection
, но я хотел бы знать, есть ли переносная дорога.
Там в Get hold of a JDBC Connection object from a Stateless Bean, но не указывается явно, что Hibernate не поддерживает это по спецификации или из-за ошибки, и это с 2011 года