一直以為,在Hiberenate中用多對(duì)一關(guān)系表達(dá)外鍵,并設(shè)置為延遲加載時(shí),Hibernate不會(huì)在查主表時(shí)去查引用表。今天的測試卻發(fā)現(xiàn)不是這么回事。
我定義了一個(gè)Topic類,其中有一個(gè)外鍵引用Company類:
?
<
many-to-one?
name
="company"
?class
="Company"
?lazy
="no-proxy"
>
<
column?
name
="COMPANY"
?length
="32"
?
/>
</
many-to-one
>
?
測試HQL如下:select id, company from Topic
而我期望的SQL應(yīng)當(dāng)是這樣:select boid, company from DT_TOPIC.
結(jié)果Hiberate Tools 生成的SQL是這樣:
?
select
topic0_.BOID?
as
?col_0_0_,
topic0_.COMPANY?
as
?col_1_0_,
company1_.COMPID?
as
?COMPID409_,
company1_.COMPNAME?
as
?COMPNAME409_,
company1_.DESCRIPTION?
as
?DESCRIPT3_409_,
company1_.STATUS?
as
?STATUS409_?
from
DT_TOPIC?topic0_?
inner
?
join
XPC_COMPANY?company1_?
on
?topic0_.COMPANY
=
company1_.COMPID
?
Hibernate生成的SQL多做了兩件影響性能的事情:
1, 與XPC_COMPANY進(jìn)行inner join。
2,把XPC_COMPANY中的所有字段全取出來了。
這樣還叫什么延遲加載啊?
?
哪位高手能告訴我這是為什么?