TA的每日心情  | 开心 2021-3-12 23:18 | 
|---|
 
  签到天数: 2 天 [LV.1]初来乍到  
 | 
 
| 
 
 在hibernate3里面多了 fetch的选项,文档里面说得很简单,我知道lazy参数才是决定是否在查询主表的时候去查询子表,但是这个 fetch又起什么作用呢?我测试了一下,发现无论是 fetch="join" 还是 fetch="select",hibernate向数据库发送的 SQL都是一样的。 以一个简单的一对多做例子:  
Many 一端 - <hibernate-mapping> 
 - <class name="lyo.test.hibernate.bean.PostThread" table="thread" catalog="testrails"> 
 - <id name="id" type="java.lang.Integer"> 
 - <column name="id" /> 
 - <generator class="native" /> 
 - </id> 
 - <many-to-one name="developer" class="lyo.test.hibernate.bean.Developer" 
 - lazy="false" fetch="join"> 
 - <column name="developer_id"> 
 - <comment></comment> 
 - </column> 
 - </many-to-one> 
 - </class> 
 - </hibernate-mapping> 
 
  复制代码 
 
One 一端: -  
 - <hibernate-mapping>   
 - <class name="lyo.test.hibernate.bean.Developer" table="developer" catalog="testrails">   
 - <id name="id" type="java.lang.Integer">   
 - <column name="id" />   
 - <generator class="native" />   
 - </id>   
 - <set name="threads" inverse="true" cascade="all">   
 -   <key>   
 -  <column name="developer_id">   
 -    <comment></comment>   
 - </column>   
 - </key>   
 -  <one-to-many class="lyo.test.hibernate.bean.PostThread" />   
 -  </set>   
 -     </class>   
 - </hibernate-mapping>
 -  
 
  复制代码 
 
 
测试查询语句: - List list=session.createQuery("from PostThread").list();
 
  复制代码 
 
 
发现 hibernate向数据库发送的语句都是: -  
 - 07:45:11,471 DEBUG org.hibernate.hql.ast.QueryTranslatorImpl.generate:217 - SQL: select postthread0_.id as id0_,  postthread0_.developer_id as developer10_0_  from testrails.thread postthread0_   
 
  复制代码 
 
怎么会没有区别呢? 文档上好像说 join的方式效率高一些,但是是否取子表的数据不是由 lazy参数决定的么,和 fetch 参数有什么关系? |   
 
 
 
 |