7
votes

Comment mapper une table créée de manière dynamique dans Hibernate?

Je travaille sur une application Web. Nous utilisons Hibernate comme orm dans notre projet. En fait, notre application crée des tables de manière dynamique sur la base de la sélection des utilisateurs. L'utilisateur peut sélectionner le nom de la table, le nom de la colonne, puis il peut importer des données à partir d'un fichier CSV. Donc, ma question est la suivante: comment cartographier cette table créée de manière dynamique avec des objets Hibernate et Java?


0 commentaires

3 Réponses :


2
votes

Combien de tables sont créées de manière dynamique? Les tables sont-elles similaires et que vous modifiez simplement le nom de la base de données?

Voici une discussion sur la modification du nom de la table: http: //www.experts-exchange. Com / Programmation / Langues / Java / J2EE / Frameworks / Spring / Q_24237099.html

Si vous construisez complètement une nouvelle table, pouvez-vous utiliser une vue et diriger des gens à une vue?

Pourquoi utilisez-vous Hibernate pour cela, plutôt que de créer des requêtes de manière dynamique dans JDBC?


0 commentaires

10
votes

Cela peut être fait de manière dynamique, mais c'est un peu désordonné:

Vous aurez besoin d'altérer dynamiquement l'objet de configuration de Hibernate avant la construction de la session. Si vous utilisez le ressort, cela peut être fait en remplacement post-dépannotationconfiguration () méthode de AnnotationSessFactoryBean ; Sinon, vous aurez juste besoin de le faire à l'aide de votre objet de configuration avant d'invoquer BuildSeSessFactory () dessus.

Si vous avez besoin de le faire sans demande de redémarrage de l'application, vous envisagez de reconstruire votre sessionFactory (ce qui signifie que vos utilisateurs devront attendre que ce soit fait) ou à l'aide d'une instance de session distincte spécifiquement dédiée à vos classes personnalisées (ce qui est À côté impossible si vos classes personnalisées doivent faire référence à vos classes intégrées).

Vous pouvez accéder aux mappages de classe / table via configuration.getmappings () . Vous devrez ensuite créer une nouvelle mappage de table via API de table et ajoutez-le à la configuration via addtable () . La même chose devra être faite avec PersistentClass qui représente une cartographie de classe. Si vous utilisez la même classe pour représenter plusieurs entités (par exemple, mappez plusieurs tables) Assurez-vous d'utiliser des noms d'entités uniques pour chacun. Vous devrez le faire (modifier la configuration) sur chaque redémarrage de l'application.


0 commentaires

0
votes

La solution de base de données - Vous pouvez créer une vue et le pointer sur une table ou une autre (en supposant que la structure est identique).

Créer une vue hibernate_name comme Sélectionnez * à partir de table_a

ou Créer une vue hibernate_name comme Sélectionnez * à partir de table_b

Vous auriez besoin de votre application pour exécuter SQL natif (DDL), Cependant, cela devrait être plus facile que Hibernate Hacks


0 commentaires