EntityManager.unwrap
のjava.sql.Connection
インスタンスを、JPAポータブルな方法でHibernate 5.2.5.Finalで取得しようとしました。JPA 2.1ポータブルな方法でHibernateからConnectionインスタンスを取得するには?
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では正常に動作します。
私はHibernate Session
をアンラップしてConnection
を取得する可能性があることを知っていますが、移植可能な方法があるかどうかを知りたいと思います。
ありGet hold of a JDBC Connection object from a Stateless Beanだが、それは、Hibernateは仕様によって、あるいはバグのため、これをサポートしていないことを明記しないと、あなたは私はあなたがJ2EEを使用していると仮定JPAを述べたので、それは2011年