oracle <id name="DBId" type="java.lang.Integer" column="DBId">
<generator class="sequence">
<param name="sequence">CHANNEL_SEQUENCE</param>
</generator>
</id>
<generator class="sequence">
<param name="sequence">CHANNEL_SEQUENCE</param>
</generator>
</id>
<generator class="identity"/>
</id>
写成两个文件?能否只用一个文件?
不是你 表的id列在sql server中由java代码写算法维护
写成两个文件?能否只用一个文件?
你用oracle映射文件就只有sequence那个
你用sqlserver的话映射文件就只有你自己写的那个
没有两种映射,除非你是两套系统用不同的数据库一句话,用oracle就用sequence那个,用sqlserver就用你自己写的那个。不要想着两个都用
----------------------------------------------------------
数据库都不同,影射文件肯定不同写成两个文件?能否只用一个文件?
----------------------------------
如果你是两套系统用了不同数据库的话,那还是一个系统里只有一种影射文件对不同数据库而言没有通用的影射文件
可是怎么得到hibernate当前连接是什么类型的数据库???
web.xml中<resource-ref>
<description>user1 datasource</description>
<res-ref-name>jdbc/user</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<init-param driver-name="com.microsoft.jdbc.sqlserver.SQLServerDriver"/>
<init-param url="jdbc:microsoft:sqlserver://192.168.0.1:1433;DatabaseName=count;SelectMethod=cursor"/>
<init-param user="sa"/>
<init-param password="123456"/>
<init-param max-connections="500"/>
<init-param max-idle-time="30"/>
<res-auth>Container</res-auth>
</resource-ref><resource-ref>
<description>user2 datasource</description>
<res-ref-name>jdbc/user</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<init-param driver-name="com.microsoft.jdbc.sqlserver.SQLServerDriver"/>
<init-param url="jdbc:microsoft:sqlserver://192.168.0.2:1433;DatabaseName=count;SelectMethod=cursor"/>
<init-param user="sa"/>
<init-param password="123456"/>
<init-param max-connections="500"/>
<init-param max-idle-time="30"/>
<res-auth>Container</res-auth>
</resource-ref>
……-----------------------------------------------------------------------
工厂组类SessionFactoryGroup /**
* 工厂组
*/
private static HashMap factoryGroup = new HashMap();
/**
* 创建factory, 并存入工厂组
* @param key 键
* @param resource 资源名
* @return
*/
public static SessionFactory buildSessionFactory(String key, String resource) {
SessionFactory factory = SessionFactoryGroup.getSessionFactory(key);
if (factory == null) {
try {
factory = new Configuration()
.configure(resource)
.buildSessionFactory();
factoryGroup.put(key, factory);
}
catch (HibernateException ex) {
throw new RuntimeException("Exception building SessionFactory: " +
ex.getMessage(), ex);
}
}
return factory;
}
/**
* 取得指定的工厂
* @param key 键值
* @return
*/
public static SessionFactory getSessionFactory(String key) {
Object obj = factoryGroup.get(key);
if (obj == null) {
return null;
}
else {
return (SessionFactory) obj;
}
}
/**
* 销毁工厂组
*/
public static void destroySessionFactories() {
Iterator keys = factoryGroup.keySet().iterator();
while (keys.hasNext()) {
Object key = keys.next();
SessionFactory factory = (SessionFactory) factoryGroup.get(key);
try {
factory.close();
factory = null;
}
catch (HibernateException he) {
//
}
factoryGroup.remove(key);
}
}
-----------------------------------------------------------------------
HibernateUtil中 /**
* 当前线程Session
*/
public static final ThreadLocal session = new ThreadLocal();
public static int icount = 0; public HibernateUtil() throws HibernateException {
}
/**
* 取得并保存当前线程的Hibernate Session
* @param resourceName 标识Resource指向
* @return
* @throws HibernateException
*/
public static Session currentSession(String resourceName) throws
HibernateException {
HashMap h = (HashMap) session.get();
Session s;
if (h != null && h.get(resourceName) != null) {
s = (Session) h.get(resourceName);
//System.out.println("get old one");
}
else {
//closeSession(resourceName);
s = createNewSession(resourceName);
if (null == h) {
h = new HashMap();
}
h.put(resourceName, s);
session.set(h);
//System.out.println("get new one");
}
//System.out.println("current session count:" + icount);
return s;
} private static Session createNewSession(String resourceName) throws
HibernateException {
icount++;
return SessionFactoryGroup.getSessionFactory(resourceName).openSession();
} /**
* 关闭当前线程中的hibernate Session
* @throws HibernateException
*/
public static void closeSession(String resourceName) throws
HibernateException {
//System.out.println("close session");
HashMap h = (HashMap) session.get();
if (h != null) {
Session s = (Session) h.get(resourceName);
h.remove(resourceName);
session.set(h);
if (s != null) {
s.disconnect();
s.close();
s = null;
}
icount--;
}
}
-----------------------------------------------------------------------