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 参数有什么关系? |
|