我想使用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查询中查询两个不同的数据库(在不同的服务器上)?


基础教程推荐
猜你喜欢
- 深入Java万物之母Object类详情 2023-01-29
- Java服务调用RestTemplate与HttpClient的使用详解 2023-01-23
- java如何实现嵌套对象转大map(扁平化) 2023-06-06
- Spring IOC容器的Bean管理基于注解属性注入方式 2022-11-28
- 自带IDEA插件的阿里开源诊断神器Arthas线上项目BUG调试 2023-01-18
- java – Hibernate,SQL和递归关联 2023-10-30
- Java数据结构之单链表的实现与面试题汇总 2023-06-23
- JavaSE实现电影院系统 2023-04-11
- Java实现HDFS文件上传下载 2023-01-29
- 一文了解Java 线程池的正确使用姿势 2023-06-17