首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么我们不在Hibernate hbm文件中使用fetch类型?

在Hibernate中,fetch类型用于定义关联关系的加载策略,决定了在查询实体对象时是否同时加载关联对象。常见的fetch类型包括EAGER和LAZY。

为什么不建议在Hibernate hbm文件中使用fetch类型呢?主要有以下几个原因:

  1. 性能问题:使用EAGER fetch类型会导致关联对象在查询时立即加载,可能会引发性能问题。当关联对象数量庞大时,查询的性能会受到明显影响。而使用LAZY fetch类型可以延迟加载关联对象,只有在访问关联对象时才会进行加载,可以提高查询性能。
  2. 内存占用问题:使用EAGER fetch类型会导致关联对象在查询时立即加载到内存中,可能会占用大量的内存空间。而使用LAZY fetch类型可以避免一次性加载大量的关联对象,减少内存占用。
  3. 数据一致性问题:使用EAGER fetch类型可能会导致关联对象的数据一致性问题。例如,如果一个实体对象A关联了另一个实体对象B,并且在查询A时同时加载B,如果B的数据发生了变化,但A的数据没有变化,那么A和B之间的数据就不一致了。而使用LAZY fetch类型可以避免这个问题,只有在访问B时才会加载最新的数据。

综上所述,不建议在Hibernate hbm文件中使用fetch类型,尤其是EAGER fetch类型。相反,推荐使用LAZY fetch类型,根据实际需要在访问关联对象时进行延迟加载,以提高性能、减少内存占用并保持数据一致性。

腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【框架】多表操作与缓存技术

,会产生1+n条sql语句; fetch = "join"是在查询的时候使用外连接进行查询,不会差生1+n的现象。...> 院系的表映射文件: Dept.hbm.xml <class name="bean.Dept" table="dept" catalog="support...现在只给出Team.<em>hbm</em>.xml配置<em>文件</em>,其中添加了inverse关键,学生映射<em>文件</em>未变。...3、延迟加载 (1) 属性的延迟加载 如Person表有一个人员图片字段(对应java.sql.Clob<em>类型</em>)属于大数据对象,当<em>我们</em>加载该对象时,<em>我们</em>不得不每一次都要加载这个字段,而不论<em>我们</em>是否真的需要它...<em>我们</em>可以如下配置<em>我们</em>的实体类的映射<em>文件</em>:         ……   <property

45610

Hibernate学习笔记2

Hibernate关联映射-一对多 5.1. 实体类创建 5.2. Hbm映射文件编写 5.3. 测试保存 5.4. 测试单向关联保存 5.5. 双向关联维护 5.6. 对象导航 5.7....Hibernate持久化类与主键生成策略 定义hbm.xml映射文件和pojo类时都需要定义主键,Hibernate定义的主键类型包括:自然主键和代理主键: 自然主键:具有业务含义字段 作为主键,比如...它使用完成后,会被jvm直接回收掉,它只是用于信息携带。 简单说:无OID 与数据库的信息无关联,不在session管理范围内。...Hibernate关联映射-一对多 我们以客户(Customer)与订单(Order)为例 5.1. 实体类创建 订单 ? 客户 ? 5.2. Hbm映射文件编写 Order.hbm.xml ?...我们可以使用级联操作来解决上述的问题. 我们现在要做的是保存订单时保存客户,需要在订单的hbm配置文件修改 ? 设置cascade=save-update 那么在保存订单时就可以自动将客户保存。

1.4K40

【框架】构架知识点详解入门与测试实例

利用Hibernate操作数据库,我们通过应用程序经过Hibernate持久层来访问数据库,其实Hibernate完成了以前JDBC的功能,不过Hibernate使用面向对象的方法操作数据库。...--表明解析本XML文件的DTD文档位置,DTD是Document Type Definition 的缩写,即文档类型的定义, XML解析器使用DTD文档来检查XML文件的合法性。...hibernate.sourceforge.net/hibernate-configuration-3.0dtd可以在Hibernate3.1.3软件包的 src\org\hibernate目录中找到此文件...--jdbc.fetch_size是指Hibernate每次从数据库取出并放到JDBC的Statement的记录条数。...--hibernate.dialect 只是Hibernate使用的数据库方言,就是要用Hibernate连接那种类型的数据库服务器。--> <!

40020

Spring Data开发手册|Java持久化API(JPA)需要了解到什么程度呢?

等ORM框架,相反,采用JPA开发时,我们仍将使用这些ORM框架,只是此时开发出来的应用不在依赖于某个持久化提供商。...使用JPA,就可以把我们的应用从Hibernate解脱出来,那么现在问题来了::如何使用JPA来开发呢? 准备好了吗,进入正题,起飞! 首先,先带大家看一下本篇文章的大致介绍。...还不进入正文,来了,安排上,一个一个来: 回顾以前的开发模式 以前开发的时候我们的DAO层,要么使用Hibernate、要么使用iBatis、dbutils、toplink ?...这种方案就是如果我们需要换ORM框架,我们的整个DAO层都不需要改变只是需要改变配置文件就可以了呢?...EnumType.STRING:表示的是以字符串的形式显示 EnumType.ORDINAL:表示枚举在数据以下标的形式显示 @Lob:修饰String类型的时候 表示的大文本 修饰byte

1.3K30

第16章 Spring Boot + Kotlin: 下一代 Java 服务端开发

当然,为了节省空间,一般情况下使用utf8也就够了。 二、内容描述 那上面说了既然utf8能够存下大部分中文汉字,那为什么还要使用utf8mb4呢?...也就是说,任何不在基本多文本平面的 Unicode字符,都无法使用 Mysql 的 utf8 字符集存储。...Mysql 的 utf8 为什么只支持持最长三个字节的 UTF-8字符呢?我想了一下,可能是因为 Mysql 刚开始开发那会,Unicode 还没有辅助平面这一说呢。...Mysql 的字符串长度算的是字符数而非字节数,对于 CHAR 数据类型来说,需要为字符串保留足够的长。...对于 CHAR 类型数据,utf8mb4 会多消耗一些空间,根据 Mysql 官方建议,使用 VARCHAR 替代 CHAR。 16.4 本章小结

1.1K10

Hibernate之集合映射的使用(Set集合映射,list集合映射,Map集合映射)

a:数据库的相关知识:   (1):一个表能否有多个主键:不能;   (2):为什么要设置主键:数据库存储的数据都是有效的,必须保持唯一性;   (3)为什么id作为主键:因为表通常找不到合适的列作为唯一列...,我们只能先引入别人的包咯,千万别忘记了哦 2:第二步,就是配置hibernate.cfg.xml了,这里的配置之前已经说过了,分三大部分   第一部分,数据库连接配置。   ...这里使用了自动创建数据表, update     下面的源码详细介绍了几种方法的区别,如何找到hibernate.hbm2ddl.auto...28 29 4:生成环境时候执行验证,当映射文件的内容与数据库表结构不一样的时候就报错 30 #hibernate.hbm2ddl.auto...) 32 //.addClass(User.class),测试的时候可以使用这个代替加载映射文件<mapping resource="com/bie/po/User.<em>hbm</em>.xml

2.7K100

Hibernate技术都不清楚,你敢说你自己会ORM框架?

Hibernate是什么 Hibernate是一个非侵入式ORMapping框架 ❝非侵入式框架:我们使用这个框架的时候,不需要继承或者实现这个框架的类或者接口,这种类型的框架就叫做非侵入式的框架,...非侵入式的框架在使用的时候更好的和原有的框架实现了解耦 侵入式框架:我们使用这个框架的时候,需要继承或者实现这个框架的某些类或者接口,这种框架叫做侵入式框架 ❞ ORMapping解析 ❝O:Object...Hibernate的简单使用 「简单使用:」 导包,将下载下来的required+jpa相关的包放到一个文件里面 在src下面创建hibernate.cfg.xml配置文件 Hibernate的xxx.hbm.xml配置文件的详解 <?...hibernate.cfg.xml配置文件这个括hibernate.是可以省略 为什么不开启事务也能查询到数据?

49820

Java Web之理解 Hibernate And MyBatis

在JavaWeb开发,最经典的就是SSH框架组合和SSM框架组合,现在很多IT公司愿意使用SSM,对于这里的H和M即Hibernate和MyBatis,今天简单来说道说道。...知识讲解 Hibernate和MyBatis都是很流行的ORM(对象关系映射,说白了就是一种和数据库进行映射的技术)持久化层框架,其实质是还是对JDBC进行了封装,方便我们使用,简化我们的开发。...HibernateHibernate这个机制就是一个配置文件hibernate.cfg.xml(放在src目录下) <session-factory...** 1、XML方式(类名.hbm.xml) 通过hbm文件建立表和类的映射关系 2、 Annotation方式 后来有了逆向工程,就简单多了,直接通过数据库表生成对应的文件即可。...--扫描类型别名的包 也可以单独扫描某个文件--> <environment

72440

Hibernate 中集合对象的抓取策略(Fetching strategies)

> Category.hbm.xml 代码: <?...java SE应用程序设计 这里我们看到 的是,我们在读取一个集合对象的 时候,hibernate用了一条selelct语句; 1、查询抓取(Select fetching) 修改:Category.hbm.xml...java SE应用程序设计 这种方法是查询抓取,他是hibernate默认值,所以我们会看到和上面的运行效果一摸一样。...尽管你我们在配置文件设置了fetch=“select”,就是说hibernate要用两个selelct语句 去执行这样的行为,但是,我们在hql语句中设置了急迫内连接查询,这样hibernate就必须只用一条..., description:Hibernate好啊 java WEB开发与实战 我们看到,下面的selelct语句中又嵌套了一个select语句 3、连接抓取(Join fetching) Category.hbm.xml

38810

Object Relational Mapping框架之Hibernate

什么是ORM:Object Relational Mapping(对象关系映射),也就是将java的对象和数据库的数据表建立映射关系,当我们在操作java的对象时就可以操作数据库的表了。...使用hibernate框架开发流程: hibernate开发需求创建俩个配置文件,一个是映射文件,另一个hibernate的框架配置文件。...创建映射文件,该映射文件一般命名规则是(类名.hbm.xml)。 class标签:建立java类和关系数据表的映射。 name:类的全路径。...id标签:建立主键和java类属性的映射。 name:与表的主键对应的类的属性名称。 column:表的主键名。 length:字段的长度。 type:字段的数据类型。...创建hibernate核心配置文件(2种:hibernate.properties----不能加载映射文件 hibernate.cfg.xml----结构清晰【通常使用这一种】)。

76370
领券