JDBC to warstwa niskopoziomowa przypominająca standardowe rozwiązania np. z C/C++.
W wyniku zapytania otrzymujesz kursor, który daje ci kolejne wiersze wyniku.
Cała reszta używa wewnętrznie JDBC.
JPA to standard (ale nie implementacja) dostępu do bazy w Javie EE.
Implementuje go kilku providerów, np. Hibernate i Toplink. Providerzy mają często jednak wiele niekompatybilnych z sobą dodatków.
W Hibernacie można nawet pisać za pomocą Hibernate API, nie JPA. Posiada ono bardzo fajne obiekty Criteria, które umożliwiają dynamiczne budowanie zapytać bez obawy o SQL injection.
Standardowo w SDK jest baza danych Java DB, która służy tylko celom testowym. Bez problemu można połączyć Javę z dowolną bazą. Wystarczy mieć odpowiedni sterownik JDBC.