Hibernate學習筆記(四)-- 實體層設計之Table per subclass
Posted on 2008-09-01 17:03 ∪∩BUG 閱讀(558) 評論(1) 編輯 收藏 所屬分類: Hibernate學習筆記關于如何配置請參看:Hibernate學習筆記(一)--用MyEclipse 6.5+MySQL 5.0的環(huán)境跑起來
準備:建表
用MySQL在名為STMS數(shù)據(jù)庫中建表
Titem
Tbook
Tdvd
src/org.lxh.hibernate3.TItem.java
1
package org.lxh.hibernate3;
2
/**
3
* @author ∪∩BUG E-mail: tidelgl@163.com
4
* @version Aug 31, 2008 3:27:51 PM
5
* @父類
6
*/
7
public class TItem {
8
9
private String id;
10
private String name;
11
private String manufacturer;
12
13
public String getId() {
14
return id;
15
}
16
17
public void setId(String id) {
18
this.id = id;
19
}
20
21
public String getName() {
22
return name;
23
}
24
25
public void setName(String name) {
26
this.name = name;
27
}
28
29
public String getManufacturer() {
30
return manufacturer;
31
}
32
33
public void setManufacturer(String manufacturer) {
34
this.manufacturer = manufacturer;
35
}
36
37
}
38

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

src/org.lxh.hibernate3.TBook.java
1
package org.lxh.hibernate3;
2
3
/**
4
* @author ∪∩BUG E-mail: tidelgl@163.com
5
* @version Aug 31, 2008 3:31:47 PM @ 繼承父類TItem
6
*/
7
public class TBook extends TItem {
8
9
private int pageCount;
10
11
public int getPageCount() {
12
return pageCount;
13
}
14
15
public void setPageCount(int pageCount) {
16
this.pageCount = pageCount;
17
}
18
}
19

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

src/org.lxh.hibernate3.TDvd.java
1
package org.lxh.hibernate3;
2
/**
3
* @author ∪∩BUG E-mail: tidelgl@163.com
4
* @version Aug 31, 2008 3:34:06 PM
5
* @ 繼承父類TItem
6
*/
7
public class TDvd extends TItem {
8
9
private String regionCode;
10
11
public String getRegionCode() {
12
return regionCode;
13
}
14
15
public void setRegionCode(String regionCode) {
16
this.regionCode = regionCode;
17
}
18
19
}
20

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

src/org.lxh.hibernate3.Titem.hbm.xml
1
xml version="1.0" encoding="utf-8"?>
2
DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
3
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
4
7
<hibernate-mapping>
8
9
<class name="org.lxh.hibernate3.TItem" table="titem"
10
catalog="stms">
11
<id name="id" type="java.lang.String">
12
<column name="id" length="32" />
13
<generator class="assigned" />
14
id>
15
<property name="name" type="java.lang.String">
16
<column name="name" length="20" not-null="true" />
17
property>
18
<property name="manufacturer" type="java.lang.String">
19
<column name="manufacturer" length="20" />
20
property>
21
22
28
<joined-subclass name="org.lxh.hibernate3.TBook"
29
table="TBook">
30
<key column="id">key>
31
<property name="pageCount" type="int"
32
column="pagecount">
33
property>
34
joined-subclass>
35
<joined-subclass name="org.lxh.hibernate3.TDvd" table="TDvd">
36
<key column="id">key>
37
<property name="regionCode" type="string"
38
column="regioncode">
39
property>
40
joined-subclass>
41
class>
42
hibernate-mapping>
43

2

3

4

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

src/hibernate.cfg.xml
1
xml version='1.0' encoding='UTF-8'?>
2
DOCTYPE hibernate-configuration PUBLIC
3
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
4
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
5
6
7
<hibernate-configuration>
8
9
<session-factory>
10
<property name="connection.username">rootproperty>
11
<property name="connection.url">
12
jdbc:mysql://localhost:3306/STMS
13
property>
14
<property name="dialect">
15
org.hibernate.dialect.MySQLDialect
16
property>
17
<property name="myeclipse.connection.profile">
18
MySql_localhost
19
property>
20
<property name="connection.password">rootproperty>
21
<property name="connection.driver_class">
22
com.mysql.jdbc.Driver
23
property>
24
<property name="show_sql">trueproperty>
25
26
27
<mapping resource="org/lxh/hibernate3/Titem.hbm.xml" />
28
29
session-factory>
30
31
hibernate-configuration>

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

src/org.lxh.hibernate3.TItemOperate.java
1
package org.lxh.hibernate3;
2
3
4
5
import java.util.Iterator;
6
7
import org.hibernate.Query;
8
import org.hibernate.Session;
9
import org.hibernate.SessionFactory;
10
import org.hibernate.cfg.Configuration;
11
12
/**
13
* @author ∪∩BUG E-mail: tidelgl@163.com
14
* @version Aug 31, 2008 4:08:14 PM
15
* @具體操作Hibernate類
16
*/
17
public class TItemOperate {
18
private Session session;
19
20
public TItemOperate() {
21
//找到Hibernate配置文件
22
Configuration config = new Configuration().configure();
23
24
//從全局文件中取出SessionFactory
25
SessionFactory factory = config.buildSessionFactory();
26
27
//從SessionFactory取出一個session
28
this.session = factory.openSession();
29
}
30
31
//插入操作
32
//TBook和TDvd類都是TItem的子類,所以只需往TItem里插入就可以了.
33
public void insert(TItem item) {
34
//執(zhí)行語句
35
this.session.save(item);
36
37
//開始事務.提交事務
38
this.session.beginTransaction().commit();
39
this.session.close();
40
}
41
42
//查詢操作
43
//TBook和TDvd類都是TItem的子類,所以只需查詢TItem的ID就可以了.
44
public TItem QueryById(String id) {
45
TItem item = new TItem();
46
String hql = "FROM TItem as t WHERE t.id=?";
47
Query q = this.session.createQuery(hql);
48
q.setString(0, id);
49
Iterator iter = q.list().iterator();
50
if(iter.hasNext()){
51
item = (TItem)iter.next();
52
}
53
return item;
54
}
55
}
56

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

45

46

47

48

49

50

51

52

53

54

55

56

src/org.lxh.hibernate3.Test.java
1
package org.lxh.hibernate3;
2
3
/**
4
* @author ∪∩BUG E-mail: tidelgl@163.com
5
* @version Aug 31, 2008 4:26:26 PM
6
* @測試類
7
*/
8
public class Test {
9
10
/**
11
* @param args
12
*/
13
/**
14
* @param args
15
*/
16
public static void main(String[] args) {
17
18
TItemOperate to = new TItemOperate();
19
20
/*
21
// 向數(shù)據(jù)庫中插入數(shù)據(jù)
22
TBook book = new TBook();
23
book.setId("02");
24
book.setName("Hibernate");
25
book.setPageCount(31);
26
book.setManufacturer("Hibernate.org");
27
28
to.insert(book);
29
30
TDvd dvd = new TDvd();
31
dvd.setId("03");
32
dvd.setManufacturer("Apache.org");
33
dvd.setName("Struts2");
34
dvd.setRegionCode("87");
35
36
to.insert(dvd);
37
*/
38
39
//查詢數(shù)據(jù)庫
40
TBook book = (TBook)to.QueryById("01");
41
System.out.println(book.getName());
42
}
43
44
}
45

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

45

例子結構: