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

hibernate延迟加载详解

熟悉 Hibernate 集合属性读者应该记得:Hibernate 要求声明集合属性只能用 SetList、Map、SortedSet、SortedMap 等接口,不能用 HashSet、ArrayList...、不是集合实现类来声明集合属性。...Hibernate 对集合属性默认采用延迟加载,在某些特殊的情况下,为 、、 等元素设置 lazy="false"属性来取消延迟加载。...在某些情况下,客户端代码不想不能够直接调用被调用者,代理对象可以在客户目标对象之间起到中介的作用。 对客户端而言,它不能分辨出代理对象与真实对象的区别,它也无须分辨代理对象真实对象的区别。...下面程序需要使用 BigImage 对象,但程序并不是直接返回 BigImage 实例,而是先返回 BigImage 的代理对象,如下面程序所示。 清单 6.

1.4K30
您找到你想要的搜索结果了吗?
是的
没有找到

SSH框架之旅-hibernate(4)

HQL 查询 使用 Query 对象调用相关的方法来做查询,需要写相关的hql语句,这是 hibernate 提供的查询语言,hql 语句中写的是实体类属性, sql 语句中写的是数据表字段。...hibernate 种也封装了 SQL 查询的对象 SQLQuery。 2.基本代码 ---- 下面的例子也是基于班级学生一对多关系说明的。...object类型,不是一个实体类的类型 Query query = session.createQuery("SELECT name FROM Student"... list = query.list(); //返回的是一个二维对象数组,list的每部分包含两个表中的数据 tx.commit();...关于类级别延迟就是方法的区别,关联级别延迟需要在映射文件中进行配置,根据班级来得到所有学生,就需要在班级实体类的映射文件中配置。在 set 标签上使用fetch属性 lazy 属性。

1.6K30

hibernate 检索方式

HQL 查询语句中能够包括命名參数 动态绑定參数 调用 Query 相关方法运行查询语句 Qurey 接口支持方法链编程风格, 它的 setXxx() 方法返回自身实例, 不是 void...Query 的 list() 方法返回的集合中包括的是数组类型的元素 , 每一个对象数组代表查询结果的一条记录 能够在持久化类中定义一个对象的构造器来包装投影查询返回的记录,使程序代码能全然运用面向对象的语义来訪问查询结果集...能够通过 DISTINCT keyword来保证查询结果不会返回反复元素 报表查询 报表查询用于对数据分组统计, 与 SQL 一样, HQL 利用 GROUP BYkeyword对数据分组,...list() 方法返回的集合中存放的是对象数组类型 –依据配置文件来决定 Employee集合的检索策略...." /> Employee.java package com.atguigu.hibernate.entities

95010

深入了解数据校验(Bean Validation):从深处去掌握@Valid的作用(级联校验)以及常用约束注解的解释说明【享学Java】

Valid注解供以使用,在本文之前,绝大多数小伙伴都是在Controller中并且结合@RequestBody一起来使用它,但在本文之后,你定会对它有个全新的认识~ 该注解用于验证级联的属性、方法参数方法返回类型...当验证属性、方法参数方法返回类型时,将验证对象及其属性上定义的约束,另外:此行为是递归应用的。...private final Set constrainedElements; private final List<Class<?...在此期间它完成了如下事(方法构造器都复杂点,因为包含入参返回值): 1. 找到方法上所有的注解保存起来 2....= 不是一个合法的电子邮件地址 org.hibernate.validator.constraints.Length.message = 长度需要在{min}{max

5.6K30

springboot使用hibernate validator校验

本文地址:http://www.cnblogs.com/mr-yang-localhost/p/7812038.html 三、hibernate的校验模式 细心的读者肯定发现了:上面例子中一次性返回了所有验证不通过的集合...Hibernate Validator有以下两种验证模式: 1、普通模式(默认是这个模式)   普通模式(会校验完所有的属性,然后返回所有的验证失败信息) 2、快速失败返回模式   快速失败返回模式(只要有一个验证失败...(hibernate.validator.fail_fast:true  快速失败返回模式    false 普通模式) ValidatorFactory validatorFactory = Validation.byProvider...的两种校验 配置hibernate Validator为快速失败返回模式: @Configuration public class ValidatorConfiguration { @Bean...设置validator为普通验证模式("hibernate.validator.fail_fast", "false"),用到的验证GroupA、GroupBmodel: GroupA、GroupB:

5.6K50

【原创】Spring Boot集成Mybatis的玩法

hibernate的sql很多都是自动生成的,无法直接维护sql;虽有hql,但功能还是不及sql强大,见到报表等变态需求时,hql也歇菜,也就是说hql是有局限的;hibernate虽然也支持原生sql...在企业级系统开发中可以根据需求灵活使用,会发现一个有趣的现象:传统企业大都喜欢使用 Hibernate互联网行业通常使用 MyBatis。...MaBatis 可以使用简单的 XML 注解用于配置原始映射,将接口 Java 的 POJO(Plain Old Java Objects,普通的 Java 对象)映射成数据库中的记录。...拥有了执行器 SQL 信息封装对象就使用它们访问数据库了,最后再返回操作结果,结束流程。 在我们具体的使用过程中,就是按照上述的流程来执行。...认真的朋友看到了上面的返回结果中有两个字段userSexnickName为Null。但是在xml方式中是正常返回的。

39910

Java理论知识及面试题

,但是这只是弥补不是用了懒加载总体性能就提高了。   ...用户可以根据元素的整数 索引(在列表中的位置)访问元素,并搜索列表中的元素 4、 List, Set, Map 是否继承自 Collection 接口?   ...ListSet 是, Map 不是 5、List、 Map、 Set 三个接口,存取元素时,各有什么特点?   ...控制反转:Spring通过控制反转实现了松散耦合,对象们给出它们的依赖,不是创建查找依赖的对象们。 面向切面的编程(AOP):Spring支持面向切面的编程,并且把应用业务逻辑系统服务分开。...线程池是指在初始化一个多线程应用程序过程中创建一个线程集合,然后在需要执行新的任务时重用这些线程不是新建一个线程。线程池中线程的数量通常完全取决于可用内存数量应用程序的需求。

52120

Java面试题 - 03前言:三、框架篇:

答:动态SQL可以完成逻辑判断动态拼接sql的功能。在mybatis的xml映射文件中,我们可以标签的形式编写动态sql。常用的动态sql标签有、、等。 10....如果用户觉得hibernate提供的缓存框架不好用,可以换其他的缓存框架自己实现缓存框架都可以。 4. hibernate有几种查询方式?...HibernateMyBatis都支持JDBCJTA事务处理。 (2).不同点: hibernate是全自动,mybatis是半自动。...hibernate的sql很多都是自动生成的,无法直接维护sql。 总的来说,mybatis小巧灵活,易于使用,hibernate学习成本相对较高,数据库移植性好。 8....答:redis有5种基本数据类型,分别是String(字符串)、Hash(字典)、List(列表)、Set(集合)、Zset(有序集合)。 4. 说说redis的优缺点。

1K10

纳税服务系统四(角色模块)【角色与权限、角色与用户】

但是呢,我们想一下需求:在获取角色所有权限的时候,Set集合装载着角色与权限的关系,角色与权限的关系装载着role_idcode。很有可能:在我查看角色拥有所有权限的时候,想要得到角色的名称。...角色的权限用set集合保存起来,set集合元素是角色与权限的关系,角色与权限是一个类,该类保存着主键类,主键类存储的是角色权限code。 我们的目的是:得到角色含有的权限。...user就不需要使用User对象了。...如果id不是为空的,那么就执行更新,如果id为空,就执行保存。...如果我们不使用checkboxList的话,那我们得到用户的所有角色,就可以直接返回给页面来进行显示了。 我们在service层还可以通过判断用户的id的值是否为null,来执行保存更新的操作。

4.6K80

hibernate官方新手教程 (转载)

让我们如果我们希望有一个小程序能够保存我们希望关注的事件(Event)这些事件的信息。 (译者注:在本教程的后面部分,我们将直接使用Event不是它的中文翻译“事件”,以免混淆。)...而其实,大多数应用程序(特别是web应用程序)都须要识别特定的对象,所以你应该 考虑使用标识属性不是把它当作一种限制。...不论你何时 调用HibernateUtil.currentSession(),它总是返回同一个线程中的同一个Hibernate单元操作。...(译者注:与Event一样,我们在后面的教程中将直接使用person来表示“人”不是它的中文翻译) 2.3.1....假设你须要一个person 一个event的标识符 - save()返回它。*******这最后一句看不明确 上面是一个关于两个同等地位的类间关联的样例,这是在两个实体之间。

99420

一篇带你入门MyBatis

MyBatis 可以使用简单的 XML 注解来配置映射原生信息,将接口 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。...HibernateMyBatis Mybatis是一个目前非常主流的ORM框架,主流的还有JPA/Hibernate。 它俩的优劣不用去评判,我感觉都很厉害的。...想必好多javer第一次了解ORM这个概念时,就是先学习的Hibernate,我当时真是感觉开启了一个新世界,完全不用去考虑具体的sql是如何实现的,因为Hibernate本身已经封装好了我们的CRUD...--返回结果为多条语句时,同样为Test,不是list,会批量返回Test类型,即为list--> <select id="getTests" resultType="entity.Test...,用以将接口方法与SQL语句相关联; resultType:<em>返回</em>结果类型,sting,JavaBean,<em>list</em>(还是JavaBean),map 运行MyBatis代码 GeneralMapper类:

23030

Hibernate二级缓存问题

通常在 Hibernate 的初始化阶段, Hibernate 会把映射元数据预定义的 SQL 语句放到 SessionFactory 的缓存中, 映射元数据是映射文件中数据的复制, 预定义 SQL...与其他应用数据共享的数据 7、缓存提供的供应商 Hibernate 的二级缓存是进程集群范围内的缓存, 缓存中存放的是对象的散装数据 二级缓存是可配置的的插件,Hibernate 允许选用以下类型的缓存插件...: EHCache: 可作为进程范围内的缓存, 存放数据的物理介质可以是内存硬盘, 对 Hibernate 的查询缓存提供了支持 OpenSymphony `:可作为进程范围内的缓存, 存放数据的物理介质可以是内存硬盘... commons-logging 2、在hibernate.cfg.xml中开启二级缓存 <property name=”hibernate.cache.use_second_level_cache...一级缓存没有关闭的情况下,再次查询同样的实体记录,返回的是对象的引用,因此两次从一级缓存中取出的对象内存地址一致。

63220

Hibernate【查询详解、连接池、逆向工程】

…使在返回的时候是一个对象、不是对象数组!...* FROM monkey_ limit 0,3"); System.out.println(sqlQuery.list()); 返回的也是对象数组: ?...Long totalRecord = (Long) queryCount.uniqueResult(); Hibernate连接池 Hibernate自带了连接池,但是呢,该连接池比较简单..Hibernate...} 为什么要使用逆向工程 由于我们每次编写Hibernate的时候都需要写实体,写映射文件。而且Hibernate的映射文件也容易出错。逆向工程可以帮我们自动生成实体映射文件,这样就非常方便了。...也就是说:一对多多对多的关系,它是不会帮你自动生成的【好像是这样子的】。。。因此,需要我们自己添加Set【如果需要】 更新,如果想要体现对应的关联关系的话,请参考该博文!

1.2K50

珍藏 | Java 岗位 100道 面试题及答案详解

不允许 4.最大的不同是,Hashtable的方法是Synchronize的,HashMap不是 7:创建多线程的方式有几种?...1:hibernate的扩展性移植性比mybatis强 2:hibernate不需要写sql语句,会自动生成,mybatis则需要写sql语句 3:hibernate支持事务、一级缓存、二级缓存、查询缓存等...新类继承了原始类的特性,新类称为原始类的派生类(子类),原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法实例变量,并且类可以修改增加新的方法使之更适合特殊的需要。...Collection是集合类的上级接口 继承与他的接口主要有Set List. Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。...当得到子类的实例后,开发人员可以调用基类中的方法不必考虑到底返回的是哪一个子类的实例。 85:List、Map、Set三个接口,存取元素时,各有什么特点?

3.3K61

一文弄懂spring validate​

建议在一个类中坚持使用字段 属性注释。不建议对字段随附的getter方法进行注释*,*因为这将导致对该字段进行两次验证。...但是java.util.List不是JavaBean(根据JavaBean的官方描述),因此不能使用兼容JSR-303的验证器直接对其进行验证。...诀窍是使用一个自定义的list类,它既是list又是JavaBean: 根据大佬的说明,我尝试实现了一个针对校验使用的List,注意需要提供get/set方法,以及使用泛型,在连接里面进行了模板代码实现...} } 先不管其他的问题,先验证一下是否可以正常使用,实际的体验: /** * 测试stackflow 的一种优雅设计,可以实现对应的list 集合bean对象校验 *...validating_constraints 总结: 在学习过程中尝试看源代码,但是后来发现个人源代码学习经验不足,胡乱的看代码是很那坚持的,看了几个小时之后突然醒悟了,还是要从官方给的案例和文档的中,从易到难,不是一上来就直接看源码

3.1K31

hibernate 二级缓存「建议收藏」

外置缓存中的数据是数据库数据的复制, 外置缓存的物理介质可以是内存硬盘 使用 Hibernate 的二级缓存 适合放入二级缓存中的数据: 很少被修改 不是很重要的数据, 允许出现偶尔的并发问题...可作为进程范围内的缓存, 存放数据的物理介质可以使内存硬盘, 对 Hibernate 的查询缓存提供了支持 OpenSymphony OSCache:可作为进程范围内的缓存, 存放数据的物理介质可以使内存硬盘...: EHCache(jar 包 配置文件), 并编译器配置文件 在 Hibernate 的配置文件中启用二级缓存并指定 EHCache 对应的缓存适配器 选择需要使用二级缓存的持久化类, 设置它的二级缓存的并发访问策略..." /> II...., 该方法先到 Session 缓存及二级缓存中查看是否存在特定 OID 的对象, 如果存在, 就直接返回该对象, 如果不存在该对象就通过相应的 SQL Select 语句到数据库中加载特定的实体对象

97920

10 个影响程序性能的Hibernate 错误,学会让你少走弯路

你只需要在Query接口上,不是在JPQL语句中设置此信息。 我在下面的代码片段中做到这一点。我首先通过id排序选定的Author实体,然后告诉Hibernate检索前5个实体。...但是,当你需要执行非常复杂的查询、实施分析报告用例对大量记录执行写操作时,结果就不同了。所有这些情况都不适合JPAHibernate的查询能力以及基于实体管理的生命周期。...不幸的是,用JPAHibernate操作起来则没有那么容易。每个实体都有自己的生命周期,而你如果要更新删除多个实体的话,则首先需要从数据库加载它们。...幸运的是,你可以使用JPQL、原生SQLCriteria查询对JPAHibernate执行相同的操作。 但是它有一些你应该知道的副作用。在数据库中执行更新删除操作时,将不使用实体。...但这不是唯一的原因。正如我在最近的测试中显示的那样,即使你读取了相同的数据库列,DTO projections也比实体快得多。 在SELECT子句中使用构造函数表达式不是实体只是一个小小的改变。

2K50
领券