随笔-95  评论-31  文章-10  trackbacks-0
1、使用hibernate生成主键方式的时候,注意别的应用程序是否同时操作一张表,如果别的应用程序使用max+1手工生成主键,那么本应用程序hibernate配置sequence的主键策略,就有可能和现有程序操作表发生违反主键约束的异常。需要主键生成方式一致就不会有问题。
2、hibernate配置多数据库源,多个就配置多个数据库连接即有多个*.hbm.xml文件,还有如何动态配置oracle表空间名字,代码如下:
 1public synchronized static Session getSession(String database) {
 2        Session session = null;
 3        if (identify_ECG.equals(database.toUpperCase())) {
 4            session = tl.get();
 5            if (session == null{
 6                if (sf_ecg == null{
 7                    if (conf_ecg == null{
 8                        conf_ecg = new Configuration();
 9                        conf_ecg.configure("hibernate_ecg.cfg.xml");
10                        Properties p = conf_ecg.getProperties();   
11                        p.put("hibernate.default_schema", getHhecg_user());   //这里是加入不同的表空间设置
12                    }

13                    sf_ecg = conf_ecg.buildSessionFactory();
14                }

15                session = sf_ecg.openSession();
16                tl.set(session);
17            }

18        }
 else if (identify_SC.equals(database.toUpperCase())) {
19            session = tl.get();
20            if (session == null{
21                if (sf_sc == null{
22                    if (conf_sc == null{
23                        conf_sc = new Configuration();
24                        conf_sc.configure("hibernate_sc.cfg.xml");
25                        Properties p = conf_sc.getProperties();   
26                        p.put("hibernate.default_schema", getHhsc_user());   //这里是加入不同的表空间设置
27                    }

28                    sf_sc = conf_sc.buildSessionFactory();
29                }

30                session = sf_sc.openSession();
31                tl.set(session);
32            }

33        }

34        return session;
35    }

36
37    // 关闭session
38    public static void closeSession() {
39        Session session = tl.get();
40        if (session != null{
41            session.close();
42            tl.set(null);
43        }

44    }
根据用户请求来判断采用何种数据库,database即为区分数据库的标识。
如果在实体类的映射文件,配置了schema="表空间用户名" 那么上面代码里面的p.put("hibernate.default_schema", getHhsc_user()); 失效
posted on 2012-01-18 12:41 朔望魔刃 阅读(265) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: