我想使用hql或jpql在两个不同的数据库(在具有相同供应商的两个不同的数据库引擎)上的两个表上编写查询? mysql ServerA上的databaseA中的tblA mysql ServerB上的databaseB中的tblB有什么解决方案?解决方法:基...
我想使用hql或jpql在两个不同的数据库(在具有相同供应商的两个不同的数据库引擎)上的两个表上编写查询?
mysql ServerA上的databaseA中的tblA
mysql ServerB上的databaseB中的tblB
有什么解决方案?
解决方法:
基本上你必须得到两个会话工厂 – 每个数据库一个(数据源).我找到了以下代码:http://www.java-forums.org/jdbc/867-hibernate-multiple-databases.html应该可以解决这个问题.
public class HibernateUtil {
private static Log log = LogFactory.getLog(HibernateUtil.class);
private static HashMap<String, SessionFactory> sessionFactoryMap = new HashMap<String, SessionFactory>();
public static final ThreadLocal sessionMapsThreadLocal = new ThreadLocal();
public static Session currentSession(String key) throws HibernateException {
HashMap<String, Session> sessionMaps = (HashMap<String, Session>) sessionMapsThreadLocal.get();
if (sessionMaps == null) {
sessionMaps = new HashMap();
sessionMapsThreadLocal.set(sessionMaps);
}
// Open a new Session, if this Thread has none yet
Session s = (Session) sessionMaps.get(key);
if (s == null) {
s = ((SessionFactory) sessionFactoryMap.get(key)).openSession();
sessionMaps.put(key, s);
}
return s;
}
public static Session currentSession() throws HibernateException {
return currentSession("");
}
public static void closeSessions() throws HibernateException {
HashMap<String, Session> sessionMaps = (HashMap<String, Session>) sessionMapsThreadLocal.get();
sessionMapsThreadLocal.set(null);
if (sessionMaps != null) {
for (Session session : sessionMaps.values()) {
if (session.isOpen())
session.close();
};
}
}
public static void closeSession() {
HashMap<String, Session> sessionMaps = (HashMap<String, Session>) sessionMapsThreadLocal.get();
sessionMapsThreadLocal.set(null);
if (sessionMaps != null) {
Session session = sessionMaps.get("");
if (session != null && session.isOpen())
session.close();
}
}
public static void buildSessionFactories(HashMap<String, String> configs) {
try {
// Create the SessionFactory
for (String key : configs.keySet()) {
URL url = HibernateUtil.class.getResource(configs.get(key));
SessionFactory sessionFactory = new Configuration().configure(url).buildSessionFactory();
sessionFactoryMap.put(key, sessionFactory);
}
} catch (Exception ex) {
ex.printStackTrace(System.out);
log.error("Initial SessionFactory creation failed.", ex);
throw new ExceptionInInitializerError(ex);
} // end of the try - catch block
}
public static void buildSessionFactory(String key, String path) {
try {
// Create the SessionFactory
URL url = HibernateUtil.class.getResource(path);
SessionFactory sessionFactory = new Configuration().configure(url).buildSessionFactory();
sessionFactoryMap.put(key, sessionFactory);
} catch (Throwable ex) {
log.error("Initial SessionFactory creation failed.", ex);
throw new ExceptionInInitializerError(ex);
} // end of the try - catch block
}
} // end of the class
沃梦达教程
本文标题为:java – 如何在hql或jpql查询中查询两个不同的数据库(在不同的服务器上)?
基础教程推荐
猜你喜欢
- JSP开发中在spring mvc项目中实现登录账号单浏览器登录 2023-07-31
- java实现五子棋程序 2023-04-06
- Mysql中备份表的多种方法 2023-07-01
- jsp实现生成中国国旗图片效果代码 2023-08-03
- JSP动态网页开发技术概述 2023-07-30
- 在Java中轻松使用工厂设计模式介绍 2023-05-14
- Flowable 设置任务处理人的四种方式详解 2023-06-10
- Java实现学生管理系统(控制台版本) 2022-12-27
- Java使用通配符实现增强泛型详解 2023-04-17
- java Date和SimpleDateFormat时间类详解 2023-05-08