В JDBC4 этим занимается драйвер, реализуя метод Connection#isValid()
В более ранних версиях используются (по крайней мере в библиотеках connection pool-ов) проверочные запросы, типа SELECT 1;
Я кстати, не уверен, что хибернейт проверяет соединения. Скорее всего обычно это делают пулы.