java – 如何在hql或jpql查询中查询两个不同的数据库(在不同的服
发布时间:2020-12-15 02:32:43 所属栏目:Java 来源:网络整理
导读:我想使用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>) 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>) 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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |