我想使用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时间戳类Instant的使用详解 2023-06-02
- BeanUtils.copyProperties复制对象结果为空的原因分析 2023-01-08
- 使用maven方式创建springboot项目的方式 2023-06-01
- java IP归属地功能实现详解 2023-02-28
- springboot读取application.yaml文件数据的方法 2023-03-22
- Spring Boot面试必问之启动流程知识点详解 2023-02-10
- Java二分查找算法与数组处理的应用实例 2023-03-11
- Java OpenCV图像处理之图形与文字绘制 2022-11-01
- MyBatis加解密插件的示例详解 2023-04-23
- Java C++算法题解leetcode801使序列递增的最小交换次数 2023-06-10