Pour ta dernière question : Hibernate est en fait une surcouche de JDBC (le driver JDBC - par ex. com.jdbc.mysql.Driver - que tu utilises doit d'ailleurs être déclarér dans le fichier de configuration hbn.config.xml) ; donc il n'y a pas de différence du point de vue technologique.
Hibernate te permet simplement de manipuler des objets (classes java) plutôt que des requêtes SQL et des ResultSets (pur jdbc) et cela grâce :
à des fichiers de mapping XML modélisant les relations entre objets
à une librairies de fonction capable de générer des requêtes en leur passant des critères de sélection
http://www.hibernate.org/hib_docs/v3/re ... g-criteria
Pour répondre à ta première question : hibernate est donc tout a fait capable de créer des jointures entre les classes (classe + sous-classe ou bien jointure gauche/right, inner, etc.) ...