JDO
permet de mapper ta base (Oracle ou autre) avec tes objets Java. Ce n'est pas dynamique, tu dois en écrire en génral un fichier de mapping ".jdo" qui permet à ton implémentation de retrouver ses relations 1-n, n-m, ses clefs primaires, les relations entre nom de champ de tables et attributs java etc ..
Castor JDO est bien un outil permettant de faire ça mais attention ! à l'apoque où je l'ai étudié, il collait pas aux spec de Sun JDO (Castor était sorti avant)
Sinon tu dois avoir plein d'autres implémentations JDO qui font ça.
Attention tout de même, si c'est une grosse appli J2EE (euuh, J2EE ou pas d'ailleurs) qui s'appuie sur du JDO pour les appels en BDD, faut faire gaffe aux perfs annoncés selon les implémentations, les montées en charges supportées, etc ..
Middlegen, pour le peu que j'ai utilisé permet de te récupérer le schéma de ta BDD et t'offre des classes pour pouvoir te générer des fichiers en fonction de ta BDD (en dynamique donc)
Le top, pourrait être à l'aide d'un script ANT de récupérer avec Middlegen ton schéma BDD et de créer en dynamique ton fichier de mapping jdo et tes classes persistantes...
bon okay, ça peut vite devenir lourdingue et ça mérite réflexion que sur un gros projet.
Hibernate, je connais pas mais je veux bien avoir des avis dessus...