社区
Java EE
帖子详情
问一个关于hibernate配置问题。
ruir
2006-05-26 11:21:52
一个表的id列在sql server中由java代码写算法维护。在oracle中用sequence自动维护。
这种表的hbm.xml文件的id怎么写???
然后代码中怎么判断处理连接的数据库是sql server还是oracle??
我用hibernate-3.1
...全文
459
18
打赏
收藏
问一个关于hibernate配置问题。
一个表的id列在sql server中由java代码写算法维护。在oracle中用sequence自动维护。 这种表的hbm.xml文件的id怎么写??? 然后代码中怎么判断处理连接的数据库是sql server还是oracle?? 我用hibernate-3.1
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
18 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
ruir
2006-05-30
打赏
举报
回复
up
sole_lodestar
2006-05-29
打赏
举报
回复
以下做法仅供参考(数据同步未考虑)
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--;
}
}
-----------------------------------------------------------------------
ruir
2006-05-29
打赏
举报
回复
同一个表,字段也一样,就是表的id字段在sql server 中是int(非identiey),在oracle是number(使用sequence)
sole_lodestar
2006-05-29
打赏
举报
回复
不同的数据库都是相同的数据表?还是不同的数据表?
water2004
2006-05-28
打赏
举报
回复
安装的时候让用户选择数据库类型,写到属性文件,启系统时根据读出的类型分别用不同的配置文件
aChinese
2006-05-27
打赏
举报
回复
干脆都用java实现,不用序列,不就行了,何苦
ruir
2006-05-27
打赏
举报
回复
系统会发布到很多地方,这些地方有的是oracle的库,有的是sql server的库.这些.hbm.xml文件我想就写一套,不搞两套,实在不行我在程序里判断一下数据库是什么类型,然后做特殊处理.
可是怎么得到hibernate当前连接是什么类型的数据库???
yyjzsl
2006-05-26
打赏
举报
回复
路过,顶下
sole_lodestar
2006-05-26
打赏
举报
回复
你用什么数据库就用哪种写法
更正一下:sqlserver中我写的那个是数据库自动增加的,
不是你 表的id列在sql server中由java代码写算法维护
ruir
2006-05-26
打赏
举报
回复
sql server中不用identiety. 用自己的java算法维护id列。
ruir
2006-05-26
打赏
举报
回复
你是说系统发布在oracle下和发布在sql server 下此hbm.xml文件不一样?
写成两个文件?能否只用一个文件?
sole_lodestar
2006-05-26
打赏
举报
回复
sql server
<id name="id">
<generator class="identity"/>
</id>
sole_lodestar
2006-05-26
打赏
举报
回复
oracle
<id name="DBId" type="java.lang.Integer" column="DBId">
<generator class="sequence">
<param name="sequence">CHANNEL_SEQUENCE</param>
</generator>
</id>
sole_lodestar
2006-05-26
打赏
举报
回复
系统发布在oracle下和发布在sql server 下此hbm.xml文件不一样
----------------------------------------------------------
数据库都不同,影射文件肯定不同
写成两个文件?能否只用一个文件?
----------------------------------
如果你是两套系统用了不同数据库的话,那还是一个系统里只有一种影射文件
对不同数据库而言没有通用的影射文件
sole_lodestar
2006-05-26
打赏
举报
回复
取决于你最终采用的数据库,我想你不可能同时用两个数据库吧?
你用oracle映射文件就只有sequence那个
你用sqlserver的话映射文件就只有你自己写的那个
没有两种映射,除非你是两套系统用不同的数据库
一句话,用oracle就用sequence那个,用sqlserver就用你自己写的那个。不要想着两个都用
ruir
2006-05-26
打赏
举报
回复
你是说系统发布在oracle下和发布在sql server 下此hbm.xml文件不一样?
写成两个文件?能否只用一个文件?
sole_lodestar
2006-05-26
打赏
举报
回复
还有问题?
ruir
2006-05-26
打赏
举报
回复
up
hibernate
需要的jar包
hibernate
配置
时所需要的jar包。
struts2+spring3+
Hibernate
2实现CRUD功能
使用技术说明: 1.使用struts2+spring3+
hibernate
3整合实现用户CRUD功能。 2.使用多种
配置
方式 A.将
hibernate
从外部导入,使用...将
hibernate
实体映射集成到spring
配置
文件中。 3.使用传统的
配置
文件集成框架。
java吐血精华大奉送,你要的都能找到(最新版本)
技术人员也过个年吧,java_吐血奉献_超值大礼包(最新版本)_含struts,
hibernate
,spring,log4j,web.xml
配置
详解,java分页大全,cvs教程,tomcat,swing教程,jboss,及各种框架的
配置
文件范例
Hibernate
配置
文件详解
Hibernate
配置
文件详解
Hibernate
配置
文件(
hibernate
.cfg.xml、hbm.xml)
hibernate
.xml
配置
Hibernate
的全局环境。
Java EE
67,512
社区成员
225,880
社区内容
发帖
与我相关
我的任务
Java EE
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
复制链接
扫一扫
分享
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章