首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Hibernate XML映射:惰性错误还是获取选择?

Hibernate XML映射:惰性错误还是获取选择?
EN

Stack Overflow用户
提问于 2010-12-07 16:09:53
回答 2查看 69.6K关注 0票数 24

我有一个简单的问题。我在我们的项目中发现了这个Hibernate配置:

代码语言:javascript
复制
<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>

fetch="select"不是指基于Fetching Strategies的“延迟加载所有集合和实体”吗?但是通过编写lazy="false"的意思是不要延迟加载。所以上面的配置是:“禁用延迟加载。启用延迟加载。”实际上,这意味着该属性是延迟加载的?

因此,我可以将该配置缩短为:

代码语言:javascript
复制
<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>

但是fetch="select"不是默认模式吗?所以实际上,我可以像这样声明相同的配置:

代码语言:javascript
复制
<many-to-one name="employee" 
    class="com.myapp.Employee"
    cascade="merge">
<column name="employee_id"
     sql-type="bigint" 
     not-null="true"/>
</many-to-one>

我说的对吗?不对?想法?谢谢

如果我想启用延迟加载,我必须添加lazy="true"并删除它

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-12-07 17:20:08

我认为Fetch Mode和time of fetch是不完全重叠的概念。

Lazy="true|false"控制关联是急切加载还是按需加载。

fetch="select|subselect|join|batch"控制实体或集合的加载方式,何时需要加载它。

因此,为了回答您的问题,拥有fetch="select"意味着:

false“第二个SELECT用于检索关联的实体或集合。除非您通过指定lazy=”

“显式禁用延迟获取,否则第二个select将仅在您访问关联时执行。”(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",将执行相同的select,不同之处在于它将被急切地执行。希望这是有意义的。

在这里也可以看到:http://community.jboss.org/wiki/AShortPrimerOnFetchingStrategies

票数 49
EN

Stack Overflow用户

发布于 2010-12-07 16:34:46

如果您将其设置为lazy,那么如果不需要,外部映射将不会选择员工。fetch显示了如果需要,它将如何查询员工。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4374528

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档