tempad
Readygo技术搜索引擎 >>防火墙 >> 问一个关于hibernate配置问题。

问一个关于hibernate配置问题。

Readygo技术搜索引擎 网络搜索 efish 2008-1-19 4:50:06

问一个关于hibernate配置问题。

楼主ruir(瑞儿)2006-05-26 11:21:52 在 Java / 框架、开源 提问

一个表的id列在sql   server中由java代码写算法维护。在oracle中用sequence自动维护。  
  这种表的hbm.xml文件的id怎么写???  
  然后代码中怎么判断处理连接的数据库是sql   server还是oracle??  
  我用hibernate-3.1 问题点数:100、回复次数:18Top

1 楼sole_lodestar(弱势群体应该怎么办)回复于 2006-05-26 11:25:44 得分 10

oracle  
   
  <id   name="DBId"   type="java.lang.Integer"   column="DBId">  
  <generator   class="sequence">  
                  <param   name="sequence">CHANNEL_SEQUENCE</param>  
                                    </generator>  
                    </id>Top

2 楼sole_lodestar(弱势群体应该怎么办)回复于 2006-05-26 11:26:34 得分 0

sql   server  
   
  <id   name="id">  
  <generator   class="identity"/>  
  </id>Top

3 楼ruir(瑞儿)回复于 2006-05-26 11:27:49 得分 0

你是说系统发布在oracle下和发布在sql   server   下此hbm.xml文件不一样?  
  写成两个文件?能否只用一个文件?Top

4 楼ruir(瑞儿)回复于 2006-05-26 11:28:26 得分 0

sql   server中不用identiety.   用自己的java算法维护id列。Top

5 楼sole_lodestar(弱势群体应该怎么办)回复于 2006-05-26 11:30:06 得分 10

你用什么数据库就用哪种写法  
   
  更正一下:sqlserver中我写的那个是数据库自动增加的,  
  不是你   表的id列在sql   server中由java代码写算法维护Top

6 楼yyjzsl(阿木)回复于 2006-05-26 11:30:52 得分 10

路过,顶下Top

7 楼ruir(瑞儿)回复于 2006-05-26 15:15:41 得分 0

upTop

8 楼sole_lodestar(弱势群体应该怎么办)回复于 2006-05-26 16:31:51 得分 5

还有问题?Top

9 楼ruir(瑞儿)回复于 2006-05-26 17:37:46 得分 0

你是说系统发布在oracle下和发布在sql   server   下此hbm.xml文件不一样?  
  写成两个文件?能否只用一个文件?  
  Top

10 楼sole_lodestar(弱势群体应该怎么办)回复于 2006-05-26 17:54:04 得分 10

取决于你最终采用的数据库,我想你不可能同时用两个数据库吧?  
  你用oracle映射文件就只有sequence那个  
  你用sqlserver的话映射文件就只有你自己写的那个  
  没有两种映射,除非你是两套系统用不同的数据库  
   
  一句话,用oracle就用sequence那个,用sqlserver就用你自己写的那个。不要想着两个都用  
   
  Top

11 楼sole_lodestar(弱势群体应该怎么办)回复于 2006-05-26 17:56:45 得分 0

系统发布在oracle下和发布在sql   server   下此hbm.xml文件不一样  
  ----------------------------------------------------------  
  数据库都不同,影射文件肯定不同  
   
  写成两个文件?能否只用一个文件?  
  ----------------------------------  
  如果你是两套系统用了不同数据库的话,那还是一个系统里只有一种影射文件  
   
  对不同数据库而言没有通用的影射文件Top

12 楼ruir(瑞儿)回复于 2006-05-27 08:23:29 得分 0

系统会发布到很多地方,这些地方有的是oracle的库,有的是sql   server的库.这些.hbm.xml文件我想就写一套,不搞两套,实在不行我在程序里判断一下数据库是什么类型,然后做特殊处理.  
  可是怎么得到hibernate当前连接是什么类型的数据库???Top

13 楼aChinese(一个中国人)回复于 2006-05-27 21:46:58 得分 10

干脆都用java实现,不用序列,不就行了,何苦Top

14 楼water2004(@-@)回复于 2006-05-28 00:57:34 得分 10

安装的时候让用户选择数据库类型,写到属性文件,启系统时根据读出的类型分别用不同的配置文件Top

15 楼sole_lodestar(弱势群体应该怎么办)回复于 2006-05-29 09:33:48 得分 0

不同的数据库都是相同的数据表?还是不同的数据表?Top

16 楼ruir(瑞儿)回复于 2006-05-29 12:19:49 得分 0

同一个表,字段也一样,就是表的id字段在sql   server   中是int(非identiey),在oracle是number(使用sequence)Top

17 楼sole_lodestar(弱势群体应该怎么办)回复于 2006-05-29 12:54:59 得分 35

以下做法仅供参考(数据同步未考虑)  
  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--;  
          }  
      }  
  -----------------------------------------------------------------------  
  Top

18 楼ruir(瑞儿)回复于 2006-05-30 20:50:35 得分 0

upTop

责任编辑: efish 参与评论 查找更多:
相关文章
16进制和二进制字节的问题 16进制和二进制字节的问题
求救:( 女的是不是特受关注 求救:( 女的是不是特受关注
怎样禁止访问文件 怎样禁止访问文件
关于对象名无效,是因为用户默认数据的问题 关于对象名无效,是因为用户默认数据的问题
谁来帮帮我bean 谁来帮帮我bean
在此上下文中不允许使用 *。此处只允许使用常量、表… 在此上下文中不允许使用 *。此处只允许使用常量、表达式或变量。不允许使用列名。
从百度过来的中文参数成乱码了,如何解决? 从百度过来的中文参数成乱码了,如何解决?
关于首页生成静态 关于首页生成静态
存储过程简介 存储过程简介
如何使用DataGrid针对每条记录可打开新链接窗口,同… 如何使用DataGrid针对每条记录可打开新链接窗口,同时将该条记录的多个字段值作为参数进行传递,用于新的窗口?新打开的窗口如何控制大小
2秒记住本站域名

玩过泡泡龙吗?Readygo?Go! 再加上.Com.Cn的后缀,那就是大名小顶的readygo.com.cn

分类导航
Readygo技术搜索引擎