Существует еще один вариант, в котором все еще используется много приведений, но, по крайней мере, он не нуждается в отражении, который вернет вам проверку времени компиляции:
public Connection getConnection(final EntityManager em) {
HibernateEntityManager hem = (HibernateEntityManager) em;
SessionImplementor sim = (SessionImplementor) hem.getSession();
return sim.connection();
}
Конечно, вы могли бы сделать это еще "красивее" с помощью нескольких instanceof
проверок, но версия выше работает для меня.