chr*_*ris 21 mapping hibernate lazy-loading
我有一个简单的问题.我在项目中发现了这个Hibernate配置:
<many-to-one name="employee"
class="com.myapp.Employee"
cascade="merge"
lazy="false"
fetch="select">
<column name="employee_id"
sql-type="bigint"
not-null="true"/>
</many-to-one>
Run Code Online (Sandbox Code Playgroud)
不fetch ="select"意味着"延迟加载所有集合和实体"基于提取策略.但是通过写lazy ="false"意味着不要延迟加载.所以上面的配置说:"禁用延迟加载.启用延迟加载." 实际上,这意味着属性是延迟加载的?
所以我可以将配置缩短为:
<many-to-one name="employee"
class="com.myapp.Employee"
cascade="merge"
fetch="select">
<column name="employee_id"
sql-type="bigint"
not-null="true"/>
</many-to-one>
Run Code Online (Sandbox Code Playgroud)
但是fetch ="select"是不是默认模式?所以实际上,我可以声明相同的配置:
<many-to-one name="employee"
class="com.myapp.Employee"
cascade="merge">
<column name="employee_id"
sql-type="bigint"
not-null="true"/>
</many-to-one>
Run Code Online (Sandbox Code Playgroud)
我对么?错误?想法?谢谢
如果我想启用延迟加载,我必须添加lazy ="true"并删除lazy ="false"?
oct*_*tav 45
我认为获取模式和获取时间是不完全重叠的概念.
Lazy="true|false" 控制是否急切地或按需加载关联.
fetch="select|subselect|join|batch" 当需要加载时,控制该实体或集合的加载方式.
所以,要回答你的问题,有fetch="select"办法:
"第二个SELECT用于检索关联的实体或集合.除非通过指定lazy ="false"显式禁用延迟提取,否则只有在访问关联时才会执行第二个选择." (http://docs.jboss.org/hibernate/core/3.3/reference/en/html/performance.html#performance-fetching)
这并不意味着禁用延迟加载!这是由lazy="true|false"国旗控制的.使用lazy="true"和fetch="select"Hibernate将延迟加载集合并将使用select加载它.如果设置lazy="false",将执行相同的选择,区别在于它将被急切执行.希望这是有道理的.
看看这里:http://community.jboss.org/wiki/AShortPrimerOnFetchingStrategies
| 归档时间: |
|
| 查看次数: |
64101 次 |
| 最近记录: |