休眠 - 问题的帮助

时间:2009-05-13 09:56:42

标签: hibernate

我有一个问题。

我的应用程序使用1)现有的hibernate连接来检索一些数据。 现在我必须2)更新从中检索数据的同一个数据库中的一些表,这必须通过单独的连接来实现。

为此目的是否可以单独使用hibernate.cfg.xml文件?

如果是这样,我将如何区分连接。

或者我不能将hibernate本身用于第二种情况?

请帮助。

2 个答案:

答案 0 :(得分:0)

在没有测试过这种情况的情况下,应该可以使用Hibernate。您需要使用相同的映射设置两个 SessionFactory ,但连接的配置不同(-> hibernate.cfg.xml)。在应用程序中使用看起来像

// 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();

还存在一种使用给定JDBC连接打开会话的方法(请参阅JavaDoc for SessionFactory),但我从未使用过它。也许你可以尝试一下。不过,第一个解决方案看起来更干净。

答案 1 :(得分:0)

有两种方法可以做到这一点。您可以将XML配置文件显式传递给配置:

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

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

或者您可以在获取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();

... 重复使用不同属性的其他配置

无论如何,您只需从正确的会话工厂获取会话。