Existe-t-il une bibliothèque de modélisation de base de données pour Java?
Question
Est-ce que quelqu'un connaît une bibliothèque Java qui fournit une abstraction utile pour analyser et manipuler des schémas de bases de données relationnelles arbitraires? Je pense à quelque chose qui pourrait faire des choses comme
LibraryClass dbLib = ...;
DbSchema schema = dbLib.getSchema("my_schema");
List<DbTable> tables = schema.getTables();
et
DbTable myTable = ...
for(DbColumn col : myTable.getColumns()){
... = col.getType();
}
ou même manipuler des tables comme
myTable.addColumn(
new DbColumn("my_new_column", Type.UNSIGNED_INTEGER);
);
DbColumn myColumn = ...
myTable.removeColumn(myColumn);
La plupart des outils de modélisation de base de données auront une telle abstraction en interne, mais est-ce qu'il y en a un en Java que je peux utiliser, ou devrai-je rouler moi-même?
La solution
DdlUtils a ce que vous recherchez. Vous pouvez lire / écrire des schémas vers / depuis XML (au format Torque) ou une base de données active, ou même définir le schéma de base de données en Java pur. Mieux encore, lisez le doco en ligne, c’est plutôt bon.
Autres conseils
JDBC lui-même a une telle abstraction. Regardez java.sql.DatabaseMetaData. Cependant, il s’agit d’une partie optionnelle de la norme qui dépend du pilote JDBC que vous utilisez, qu’elle soit mise en œuvre ou non.
Je ne l'utilise plus depuis des années, mais Hibernate possédait des outils de manipulation de modèles de données au moment de la construction. Hibernate a également la notion de dialectes qui serait utile si vous ciblez plus d'un fournisseur de base de données.
Quand j'étais chez MetaMatrix, nous avons construit une telle chose en utilisant EMF (Eclipse Modeling Framework) où nous avons créé un méta-modèle de représentation en UML, puis généré à partir de code. La bonne chose à propos du métamodèle est que si vous le faites bien, vous pouvez interagir entre les métamodèles, à condition que vous ayez fait de bons choix contre le méta-méta-modèle.
Nous avions également un importateur qui importait des métadonnées à partir de l'API JDBC et créait les objets de modèle équivalents appropriés (base de données, table, colonne, clés, etc.).
Ce code sera peut-être un jour open source car JBoss l’a acheté, mais je ne pense pas que ce soit le cas.