EntityManager.unwrap
으로 java.sql.Connection
인스턴스를 얻으려고하면 Hibernate 5.2.5.Final을 사용하여 JPA로 이식 할 수 있습니다. Exception in thread "main" javax.persistence.PersistenceException: Hibernate cannot unwrap interface java.sql.Connection
로 인해 실패Hibernate로부터 Connection 인스턴스를 가져 오는 JPA 2.1- 포터블 방법?
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();
}
}
. 그것은 Eclipselink 2.6.4에서 잘 작동합니다.
최대 절전 모드 Session
을 풀어서 Connection
을 얻을 수있는 가능성에 대해 알고 있지만, 휴대용 방법이 있는지 알고 싶습니다.
가 Get hold of a JDBC Connection object from a Stateless Bean하지만 그것은 Hibernate가 사양이나 버그로 인해이 기능을 지원하지 않음을 명시 적으로 언급하지 않으며, 당신은 당신이 J2EE를 사용한다고 가정 JPA를 언급 한 이후로는 2011 년