2009-05-13 6 views
1

J'ai un problème.hibernate - aide problème

Mon application utilise 1) d'une connexion hibernate existante pour récupérer certaines données. Maintenant, il faut 2) mettre à jour certaines tables dans le même DB à partir duquel les données sont récupérées et cela doit se faire par le biais d'une connexion séparée.

Est-il possible d'avoir un fichier hibernate.cfg.xml séparément dans ce but?

si oui comment vais-je différencier entre les connexions. Ou je ne peux pas utiliser hibernate lui-même pour le second cas?

veuillez nous aider.

+0

Si je peux demander - pourquoi avez-vous besoin de connexions séparées pour la lecture et la mise à jour? – rudolfson

+0

Je voudrais aussi demander pourquoi. Le fait que vous ayez l'intention d'utiliser un motif inhabituel comme celui-ci devrait faire monter le drapeau. Essayez-vous de contourner un autre problème, comme peut-être le verrouillage? Cela peut ne pas être le moyen le plus efficace de résoudre votre problème sous-jacent. –

Répondre

0

Sans avoir testé ce scénario, il devrait être possible avec Hibernate. Vous devez configurer deux SessionFactory en utilisant le même mappage mais des configurations différentes pour la connexion (-> hibernate.cfg.xml). Dans l'utilisation demande ressemblerait

// read entry using first session factory 
Session sessionForRead = readSessionFactory.getCurrentSession(); // or openSession() 
sessionForRead.beginTransaction(); 
MyEntry entry = (MyEntry) sessionForRead.load(MyEntry.class, someId) // or whatever to load entries 
sessionForRead.getTransaction().commit(); 

// update entry using the other session factory 
Session sessionForUpdate = updateSessionFactpry.getCurrentSession(); // or openSession() 
sessionForUpdate.beginTransaction(); 
sessionForUpdate.update(entry); 
sessionForUpdate.getTransaction().commit(); 

Il existe aussi une méthode pour ouvrir une session avec une connexion JDBC donnée (voir JavaDoc for SessionFactory), mais je jamais utilisé. Peut-être pourriez-vous essayer. La première solution me semble plus propre.

0

Il existe deux façons de procéder. Vous pouvez passer explicitement le fichier de configuration XML à la configuration:

AnnotationConfiguration cfg1 = new AnnotationConfiguration(); 
cfg.configure("/hibernate1.cfg.xml"); 

AnnotationConfiguration cfg2 = new AnnotationConfiguration(); 
cfg.configure("/hibernate2.cfg.xml"); 

Ou vous pouvez mettre à jour manuellement les propriétés de base de données avant d'obtenir la SessionFactory:

Configuration cfg1 = new Configuration(); 
cfg1.addClass(...) 
Properties p = new Properties(); 
p.put(Environment.DATASOURCE, "jdbc/database1"); // if using JNDI 
p.put(Environment.URL, DRIVER, etc..) // if using a direction connection 
cfg1.addProperties(p); 
cfg1.buildSessionFactory(); 

... répéter pour d'autres configurations utilisant des propriétés différentes

Cependant, vous le faites, vous obtenez simplement la session de la bonne usine de session.