2010-06-09 4 views
1

J'ai MainDB base de données et le nombre inconnu (au moment de la compilation) de UserDB_1, ..., UserDB_N bases de données. MainDB contient les noms de ces bases de données UserDB dans certaines tables (le nouveau UserDB peut être créé lors de l'exécution). Tous les champs UserDB ont exactement les mêmes noms et champs de table.Besoin de mapper des classes à différentes bases de données à l'exécution dans Hibernate

Comment gérer une telle situation dans Hibernate? (La structure de la base de données ne peut pas être modifiée).

Actuellement je prévois de créer User générique des classes ne sont pas mappés à rien et il suffit d'utiliser SQL natif pour toutes les requêtes:

session.createSQLQuery("select * from " + db + ".user where id=1") 
    .setResultTransformer(Transformers.aliasToBean(User.class)); 

Y a-t-il quelque chose de mieux que je peux faire? Idéalement, je voudrais avoir des mappages pour les tables et les relations UserDB et utiliser HQL sur la base de données requise.

Répondre

0

Vous spécifiez la base de données lors de la construction de votre SessionFactory (via la chaîne de connexion du DataSource). Lorsque vous souhaitez utiliser une autre base de données, reconstruisez simplement le SessionFactory avec le nouveau DataSource. Déclarer et injecter différents SessionFactory (un par base de données)

+0

Pourriez-vous s'il vous plaît montrer comment le reconstruire? Cela n'affecterait-il pas l'ensemble de l'application? Je dois passer à une autre base de données seulement temporaire pour des requêtes spécifiques. Et comment mapper les tables utilisateur? Je dois fournir des noms de tables pour le mappage, mais les bases de données utilisateur peuvent ne pas exister au moment de la compilation, donc je ne peux pas les mapper à quelque chose de spécifique. – serg

+0

J'utilise également Spring, donc cette SessionFactory est initialisée dans le fichier de configuration et encapsulée dans TransactionManager. – serg

0

Questions connexes