2、hibernate配置多數據庫源,多個就配置多個數據庫連接即有多個*.hbm.xml文件,還有如何動態配置oracle表空間名字,代碼如下:
1
public 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即為區分數據庫的標識。
2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

如果在實體類的映射文件,配置了schema="表空間用戶名" 那么上面代碼里面的p.put("hibernate.default_schema", getHhsc_user()); 失效