一尘不染

Hibernate XML映射:延迟错误还是获取选择?

hibernate

我有一个简单的问题。我在我们的项目中找到了这个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>

取=“选择” 基于平均“延迟加载所有的集合和实体”
抓取策略。但是通过写 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>

但是 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>

我对么?错误?有想法吗?谢谢

如果要启用延迟加载,必须添加 lazy =“ true” 并删除 lazy =“ false” 吗?


阅读 149

收藏
2020-06-20

共1个答案

一尘不染

我认为访存模式和访存时间不是完全重叠的概念。

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"标志控制的。With
lazy="true"fetch="select"Hibernate将延迟加载集合,并使用选择将其加载。如果设置lazy="false",将执行相同的选择,不同之处在于它会急切地执行。希望这是有道理的。

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

2020-06-20