当前位置: 首页 > 面试题库 >

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

阎劲
2023-03-14
问题内容

我有一个简单的问题。我在我们的项目中找到了这个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" 控制关联是紧急加载还是按需加载。

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



 类似资料:
  • 我正在使用模型映射器(http://modelmapper.org/)将具有延迟加载对象列表(通过Hibernate)的实体映射到具有modelmapper.map()的DTO。 输出dto的列表为空值,但实体的列表已填充。当我改为“急切加载”时,一切正常,但我的查询太大,所以这不是一个选项。 有人知道模型映射器如何映射代理的Hibernate实体类吗? 这是我的父实体: 运输署署长: 这是我如何

  • 问题内容: 我有两个表,并且在数据库中。在表中,我有一个Integer 对该表的引用。(idA是B的外键)当我使用hibernate- tools进行反向工程时,会生成两个Java对象。 和 但是我想要 我怎样才能做到这一点? 谢谢, 问题答案: 因此,我找到了一个解决方案:创建一个自定义并将方法的返回更改为。

  • 我正在hibernate的帮助下开发一个电子购物程序。因为我是jsp、servlet、hibernate的新手,我不知道如何使用关系表中的附加列进行多对多关系映射。我已经阅读了几篇教程,但其中大部分都是关于hibernate社区的注释映射和文档,但没有一篇适合我的情况。 我有三个表,分别是电影信息表、订单详情表和订单详情表(关系表),其中订单详情表的结构如下所示。 我正在尝试使用四个POJO类来实

  • 问题内容: 我需要在循环中对数据库进行SQL查询: 更好的方法是:保持原样或循环后移动: 或者是其他东西 ? 问题答案: 整个要点是直到函数返回才执行,因此将其放置在要关闭的资源打开后的适当位置。但是,由于要在循环内创建资源,因此根本不要使用defer- 否则,在函数退出之前,您不会关闭在循环内创建的任何资源,因此它们会堆积直到然后。相反,您应该在每次循环迭代结束时关闭它们, 而无需 :

  • 使用最新的jstree。我可以加载所有节点,但现在我正在尝试延迟加载节点。当我展开最后一个可见节点时,不会生成GET。 .js 从初始调用返回的JSON数据是[{"state":{"open": true,"禁用": false,"选择": false},"id":"-100","text":"Node1 Text","子":[{"state":{"open": false,"禁用": false

  • 我试图按照headfirst jsp和servlets的书,我遇到了以下错误。HTTP状态404 - /Beer/form.html 我的文件夹组织如下 假猫- 同样在啤酒文件夹中,我还有另一个文件夹 WEB-INF,其中包含 web.xml 文件。 首先我想也许我的雄猫根本不起作用,所以我使用我以前完成的 servlet 对其进行了测试。成功了。 我重新启动了web服务器,但仍然出现此错误。我正