我有一个简单的问题。我在我们的项目中找到了这个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” 吗?
我认为访存模式和访存时间不是完全重叠的概念。
Lazy="true|false" 控制关联是紧急加载还是按需加载。
Lazy="true|false"
fetch="select|subselect|join|batch" 控制何时需要加载该实体或集合。
fetch="select|subselect|join|batch"
因此,为了回答您的问题,您需要采取以下措施fetch="select":
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",将执行相同的选择,不同之处在于它会急切地执行。希望这是有道理的。
lazy="true|false"
lazy="true"
lazy="false"
也可以在这里查看:http : //community.jboss.org/wiki/AShortPrimerOnFetchingStrategies