1。面向設(shè)計(jì)的映射:
使用組件(無id的實(shí)體類),把一些信息歸類
2。面向性能的映射:?
? 在hibernate 3中使用延遲加載技術(shù);?
? 在hiberntae2中采用繼承方法,把數(shù)據(jù)大的字段分派在子類中,父類只保留簡(jiǎn)單字段即可;同時(shí),配置文件更改
hibernate 加載機(jī)制:
1。延遲加載: 這個(gè)比較常用,即在用到關(guān)聯(lián)數(shù)據(jù)時(shí)才進(jìn)行查詢。<lazy="true">
在hibernate2中默認(rèn)為false,但在hibernate3中默認(rèn)為ture,
因?yàn)檫@點(diǎn)我曾經(jīng)有過一段常時(shí)間的困惑
當(dāng)時(shí)用到延遲加載時(shí),hibernate使用代理類動(dòng)態(tài)的創(chuàng)建對(duì)象,真正的對(duì)象位于CGLIB$CALLBACK$TARGET對(duì)象中,我們獲得的對(duì)象是一個(gè)CGLIB代理類,只有當(dāng)真正用到數(shù)據(jù)時(shí),代理類才會(huì)檢查被代理對(duì)象是否存在,如存在,返回被代理對(duì)象數(shù)據(jù),如不存在,則去進(jìn)行hibernate查詢
在集合屬性查詢時(shí),如果使用了延遲加載,則當(dāng)session關(guān)閉后,是無法得到集合屬性的,我們可以通過Hibernate.initialize()強(qiáng)制加載集合對(duì)象
2.即時(shí)加載: 查詢時(shí)同時(shí)做一次對(duì)關(guān)聯(lián)數(shù)據(jù)的查詢<lazy="false">
Hibernate:?select?tuser0_.id?as?id0_0_,?tuser0_.name?as?name0_0_,?tuser0_.addr?as?addr0_0_,?tuser0_.tel?as?tel0_0_?from?Tuser?tuser0_?where?tuser0_.id=?
Hibernate:?select?games0_.userid?as?userid1_,?games0_.id?as?id1_,?games0_.id?as?id1_0_,?games0_.name?as?name1_0_,?games0_.userid?as?userid1_0_?from?Tgame?games0_?where?games0_.userid=?
即時(shí)加載時(shí),當(dāng)調(diào)用session.load()時(shí)hibernate執(zhí)行一次數(shù)據(jù)庫查詢,然后直接賦值給對(duì)象
3.預(yù)先加載:通過out jion 進(jìn)行抓取,不適合一對(duì)多等查詢
4。批量加載
在批量處理時(shí),一級(jí)緩存會(huì)把所有處理數(shù)據(jù)對(duì)象納入一級(jí)緩存,如過數(shù)據(jù)過多,則會(huì)導(dǎo)致內(nèi)存益處。解決辦法就是用批量提交的方法
<property?name="hibernate.jdbc.batch_size">3</property>
使用組件(無id的實(shí)體類),把一些信息歸類
?1
<component?name="contact"?class="entiy.Contact">
?2
??????????<property
?3
????????????name="addr"
?4
????????????type="string"
?5
????????????column="addr"????
?6
????????/>
?7
????????<property
?8
????????????name="tel"
?9
????????????type="string"
10
????????????column="tel"????
11
????????/>
12
??
13
????????</component>
14

?2

?3

?4

?5

?6

?7

?8

?9

10

11

12

13

14

2。面向性能的映射:?
? 在hibernate 3中使用延遲加載技術(shù);?
? 在hiberntae2中采用繼承方法,把數(shù)據(jù)大的字段分派在子類中,父類只保留簡(jiǎn)單字段即可;同時(shí),配置文件更改
?1
<class
?2
????????name="parent"
?3
????????table="Tuser"
?4
????????optimistic-lock="version"
?5
????>
?6
?7
????????<id
?8
????????????name="id"
?9
????????????column="id"
10
????????????type="int"
11
????????????unsaved-value="0"
12
????????>
13
???????????<generator?class="sequence">
14
????????????????<param?name="sequence">TUSER_SEQ</param>
15
????????????</generator>
16
????????</id>
17
18
????????<property
19
????????????name="name"
20
????????????type="string"
21
????????????column="name"
22
????????????????????/>
23
????????

?2

?3

?4

?5

?6

?7

?8

?9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

?1
<class
?2
????????name="children"
?3
????????table="Tuser"
?4
????????optimistic-lock="version"
?5
????????polymorphism="explicit"?????? //指名這個(gè)類是個(gè)多態(tài),只有則指定類是才會(huì)查詢,否則不會(huì)查詢(如:from object),只會(huì)查詢parent,只有(from children)才會(huì)查旬
?6
????>
?7
?8
????????<id
?9
????????????name="id"
10
????????????column="id"
11
????????????type="int"
12
????????????unsaved-value="0"
13
????????>
14
???????????<generator?class="sequence">
15
????????????????<param?name="sequence">TUSER_SEQ</param>
16
????????????</generator>????
17
????????</id>
18
19
????????<property
20
????????????name="name"
21
????????????type="string"?
22
????????????column="name"
23
???????????????????/>
24
25
26
???????????<property
27
????????????name="blog"
28
????????????type="blog"?
29
????????????column="blog"
30
???????????????????/>
31
32
????????

?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

hibernate 加載機(jī)制:
1。延遲加載: 這個(gè)比較常用,即在用到關(guān)聯(lián)數(shù)據(jù)時(shí)才進(jìn)行查詢。<lazy="true">
在hibernate2中默認(rèn)為false,但在hibernate3中默認(rèn)為ture,
因?yàn)檫@點(diǎn)我曾經(jīng)有過一段常時(shí)間的困惑
1
select?tuser0_.id?as?id0_0_,?tuser0_.name?as?name0_0_,?tuser0_.addr?as?addr0_0_,?tuser0_.tel?as?tel0_0_?from?Tuser?tuser0_?where?tuser0_.id=?
?
當(dāng)時(shí)用到延遲加載時(shí),hibernate使用代理類動(dòng)態(tài)的創(chuàng)建對(duì)象,真正的對(duì)象位于CGLIB$CALLBACK$TARGET對(duì)象中,我們獲得的對(duì)象是一個(gè)CGLIB代理類,只有當(dāng)真正用到數(shù)據(jù)時(shí),代理類才會(huì)檢查被代理對(duì)象是否存在,如存在,返回被代理對(duì)象數(shù)據(jù),如不存在,則去進(jìn)行hibernate查詢
在集合屬性查詢時(shí),如果使用了延遲加載,則當(dāng)session關(guān)閉后,是無法得到集合屬性的,我們可以通過Hibernate.initialize()強(qiáng)制加載集合對(duì)象
2.即時(shí)加載: 查詢時(shí)同時(shí)做一次對(duì)關(guān)聯(lián)數(shù)據(jù)的查詢<lazy="false">


即時(shí)加載時(shí),當(dāng)調(diào)用session.load()時(shí)hibernate執(zhí)行一次數(shù)據(jù)庫查詢,然后直接賦值給對(duì)象
3.預(yù)先加載:通過out jion 進(jìn)行抓取,不適合一對(duì)多等查詢
4。批量加載
在批量處理時(shí),一級(jí)緩存會(huì)把所有處理數(shù)據(jù)對(duì)象納入一級(jí)緩存,如過數(shù)據(jù)過多,則會(huì)導(dǎo)致內(nèi)存益處。解決辦法就是用批量提交的方法
