一直以為,在Hiberenate中用多對一關系表達外鍵,并設置為延遲加載時,Hibernate不會在查主表時去查引用表。今天的測試卻發現不是這么回事。
我定義了一個Topic類,其中有一個外鍵引用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應當是這樣:select boid, company from DT_TOPIC.
結果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進行inner join。
2,把XPC_COMPANY中的所有字段全取出來了。
這樣還叫什么延遲加載啊?
?
哪位高手能告訴我這是為什么?