【hibernate】
文章平均质量分 58
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架.
喵学长
爱好动漫、游戏的二次元,Java工程师
展开
-
【 Hibernate4】二级缓存详解
缓存:缓存是什么,解决什么问题? 位于速度相差较大的两种硬件/软件之间的,用于协调两者数据传输速度差异的结构,均可称之为缓存Cache。缓存目的:让数据更接近于应用程序,协调速度不匹配,使访问速度更快。 缓存的范围分为3类: 1.事务范围(单Session即一级缓存) 事务范围的缓存只能被当前事务访问,每个事务都有各自的缓存,缓存内的数据通常采用相互关联的对象形式.缓存的转载 2017-09-03 15:20:03 · 317 阅读 · 0 评论 -
细谈Hibernate之悲观锁和乐观锁解决hibernate并发
锁( locking),这个概念在我们学习多线程的时候曾经接触过,其实这里的锁和多线程里面处理并发的锁是一个道理,都是暴力的把资源归为自己所有。这里我们用到锁的目的就是通过一些机制来保证一些数据在某个操作过程中不会被外界修改,这样的机制,在这里,也就是所谓的“锁”,即给我们选定的目标数据上锁,使其无法被其他程序修改。Hibernate支持两种锁机制:即通常所说的“悲观锁(Pessimistic转载 2017-09-03 17:01:40 · 408 阅读 · 0 评论 -
【Hibernate】事务与并发处理
什么是事务?事务,是工作中的基本逻辑单元。一个事务可能包括数据库的一系列操作,而一个完整的事务保证这些操作都被正确地同步到数据库中,不会发生数据不完整或者错误,或者受到其他干扰。事务的4个特性原子性:即作为一个事务,它是不可分割的整体,只有全部操作都完成了,才算结束;其中任何一个操作执行失败,整个事务都要撤销。一致性:即事务不能破坏数据库的完整性和业务逻辑的一致性。事务转载 2017-09-09 11:29:57 · 327 阅读 · 0 评论 -
【Hibernate】事务的概念
一、什么是事务 事务是访问数据库的一个操作序列,数据库应用系统通过事务集来完成对数据库的存取。事务的正确执行使得数据库从一种状态转换成另一种状态。 事务必须服从ISO/IEC所制定的ACID原则。ACID是原子性(atomicity)、一致性(consistency)、隔离性(isolation)和持久性(durability)的缩写事务必须服从ISO/IEC所制定的转载 2017-09-10 14:55:55 · 229 阅读 · 0 评论 -
【Hibernate】检索数据的五种方式
我们知道Hibernate为我们提供了很多种数据查询方式,有成为Hibernate的检索方式,而且查询时我们在项目中进行的最多的操作,那么如何利用Hibernate检索数据呢?下面让我们学习了解一下:Hibernate检索数据的五种方式:1.导航对象图检索方式。(根据已经加载的对象,导航到其他对象。)2.OID检索方式。(按照对象的OID来检索对象。)3转载 2017-09-10 14:57:09 · 325 阅读 · 0 评论 -
【Hibernate】Session清空缓存与清理缓存
1. 清空缓存 当调用session.evict(customer); 或者session.clear(); 或者session.close()方法时,Session的缓存被清空。2. 清理缓存 Session具有一个缓存,位于缓存中的对象处于持久化状态,它和数据库中的相关记录对应,Session能够在某些时间点,按照缓存中持久化对象的属性变化来同步转载 2017-09-10 14:58:01 · 2641 阅读 · 0 评论 -
【Hibernate】聚集函数
聚集函数HQL 查询甚至可以返回作用于属性之上的聚集函数的计算结果:select avg(cat.weight), sum(cat.weight), max(cat.weight), count(cat)from Cat cat受支持的聚集函数如下:avg(...), sum(...), min(...), max(...)count(*)原创 2017-09-10 15:05:47 · 291 阅读 · 0 评论 -
【Hibernate】注意事项
Hibernate注意事项:1、SQLQuery如果没有添加addEntry(Student.class)会将一行记录封装为对象数组,再添加到list集合,添加addEntry(Student.class),会将一行记录封装为指定的对象类型2、本地sql查询不能跨数据库平台,一般不推荐使用,除非必须使用3、Hibernate中setParameter()参数索引从0开始4、 一般不原创 2017-09-03 09:20:11 · 552 阅读 · 0 评论 -
【Hibernate】一对一映射
一、需求: 用户与身份证信息 一条用户记录对应一条身份证信息! 一对一的关系!设计数据库:JavaBean:映射: 二、基于外键的映射// 身份证public class IdCard { // 身份证号(主键)private String cardNum;// 对象唯一表示(Object Identified, OID)private String原创 2017-09-02 16:06:55 · 474 阅读 · 0 评论 -
【Hibernate】懒加载
一、面试题: get、load方法区别?get: 及时加载,只要调用get方法立刻向数据库查询load:默认使用懒加载,当用到数据的时候才向数据库查询。 二、懒加载:(lazy)概念:当用到数据的时候才向数据库查询,这就是hibernate的懒加载特性。目的:提供程序执行效率!三、lazy值true 使用懒加载false 关闭懒加载extra原创 2017-09-02 16:08:59 · 364 阅读 · 0 评论 -
【Hibernate】uniqueResult方法
数据库中根据你的查询条件只会返回唯一结果,就可以用uniqueResult这个方法!否则就用list();其返回类型为Object uniqueResult()方法通常是在业务方法查询语句中用到的,比如(UsersRoles)getSession().createQuery("select ur from UsersRoles ur where ur.role.id = ? and ur.原创 2017-09-02 16:10:06 · 956 阅读 · 0 评论 -
【Hibernate】查询
1. 查询概述1) Get/load主键查询2) 对象导航查询3) HQL查询, Hibernate Query language hibernate 提供的面向对象的查询语言。a) 注意:使用hql查询的时候 auto-import="true" 要设置true,b) 如果是false,写hql的时候,要指定类的全名c) 查询全部列d) 查询指定的列【返回对象数据原创 2017-09-02 16:10:45 · 653 阅读 · 0 评论 -
【Hibernate】一级缓存
一、为什么要用缓存?目的:减少对数据库的访问次数!从而提升hibernate的执行效率! 二、Hibernate中缓存分类:一级缓存二级缓存 三、一级缓存概念1)Hibenate中一级缓存,也叫做session的缓存,它可以在session范围内减少数据库的访问次数! 只在session范围有效! Session关闭,一级缓存失效!2)当调用session的s原创 2017-09-02 16:16:04 · 496 阅读 · 0 评论 -
【Hibernate】组件映射与继承映射
一、类的关系组合关系一个类中包含了另外一个类。这2个类中就是组合关系。需求: 汽车与车轮继承关系一个类继承另外一个类。这2个类中就是继承关系。需求:动物猫猴子二、组件映射类组合关系的映射,也叫做组件映射!注意:组件类和被包含的组件类,共同映射到一张表!需求: 汽车与车轮数据库 T_car主键 汽车名称 轮子大小 个数Javab原创 2017-09-02 16:20:01 · 586 阅读 · 0 评论 -
【Hibernate】对连接池的支持
一、连接池作用: 管理连接;提升连接的利用效率!常用的连接池: C3P0连接池 Hibernate 自带的也有一个连接池,且对C3P0连接池也有支持! 二、Hbm 自带连接池只维护一个连接,比较简陋。可以查看hibernate.properties文件查看连接池详细配置: #################################### Hibe原创 2017-09-02 16:22:05 · 510 阅读 · 0 评论 -
【Hibernate】二级缓存(Hibernate默认使用的二级缓存)
一、Hibernate提供的缓存有一级缓存、二级缓存。 目的是为了减少对数据库的访问次数,提升程序执行效率! 二、一级缓存基于Session的缓存,缓存内容只在当前session有效,session关闭,缓存内容失效!特点: 作用范围较小! 缓存的事件短。缓存效果不明显。 三、二级缓存Hibernate提供了基于应用程序级别的缓存, 可以跨多个session原创 2017-09-02 16:24:47 · 6659 阅读 · 0 评论 -
【Hibernate】项目中session的管理方式
Session的创建方式:@Testpublic void testSession() throws Exception {//openSession: 创建Session, 每次都会创建一个新的sessionSession session1 = sf.openSession();Session session2 = sf.openSession();System.ou原创 2017-09-02 16:25:44 · 346 阅读 · 0 评论 -
org.hibernate.exception.SQLGrammarException: Could not execute JDBC batch update错误
org.hibernate.exception.SQLGrammarException: Could not execute JDBC batch updateat org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:92)at org.hibernate.exception.JDBCExcept原创 2017-05-19 11:19:17 · 4200 阅读 · 0 评论 -
【Hibernate】ORM概念
一、ORM概念O, Object 对象R, Realtion 关系 (关系型数据库: MySQL, Oracle…)M,Mapping 映射ORM:对象关系映射! 二、ORM, 解决什么问题?存储: 能否把对象的数据直接保存到数据库?获取: 能否直接从数据库拿到一个对象?想做到上面2点,必须要有映射! 三、总结:Hibernate与O原创 2017-05-19 11:21:38 · 3490 阅读 · 0 评论 -
【Hibernate】搭建一个Hibernate环境,开发步骤
搭建一个Hibernate环境,开发步骤:1. 下载源码版本:hibernate-distribution-3.6.0.Final2. 引入jar文件hibernate3.jar核心 + required 必须引入的(6个) + jpa 目录 + 数据库驱动包3. 写对象以及对象的映射Employee.java 对象Employee.hbm原创 2017-05-19 11:25:45 · 3867 阅读 · 0 评论 -
【Hibernate】 Api
Hibernate Api:|-- Configuration 配置管理类对象config.configure()加载主配置文件的方法(hibernate.cfg.xml)默认加载src/hibernate.cfg.xmlconfig.configure(“cn/config/hibernate.cfg.xml”)加载指定路径下指定名称的主配置文件config.buil原创 2017-05-19 11:27:34 · 3515 阅读 · 0 评论 -
【Hibernate】数据操作
Hibernate数据操作:1、更新:session.save(obj); 保存一个对象session.update(emp); 更新一个对象session.saveOrUpdate(emp); 保存或者更新的方法:à没有设置主键,执行保存;à有设置主键,执行更新操作;à如果设置主键不存在报错! 2、主键查询:session.get(Employ原创 2017-05-19 11:28:37 · 3363 阅读 · 0 评论 -
【Hibernate】crud
Hibernate crud一、根据主键查询对象信息:public Employee findById(Serializable id) {Session session = null;Transaction tx = null;try {// 获取Sessionsession = HibernateUtils.getSession();// 开启事务tx = session原创 2017-05-19 11:31:18 · 3499 阅读 · 0 评论 -
【Hibernate】Hibernate.cfg.xml 主配置
Hibernate.cfg.xml 主配置1、Hibernate.cfg.xml主配置文件中主要配置:数据库连接信息、其他参数、映射信息! 2、常用配置查看源码:hibernate-distribution-3.6.0.Final\project\etc\hibernate.properties 3、数据库连接参数配置例如:## MySQL#hibernat原创 2017-05-19 11:32:45 · 4050 阅读 · 0 评论 -
【Hibernate】映射配置
一、映射配置1. 普通字段类型2. 主键映射单列主键映射多列作为主键映射 主键生成策略,查看api: 5.1.2.2.1. Various additional generators 3. 数据库:一个表能否有多个主键? 不能。为什么要设置主键? 数据库存储的数据都是有效的,必须保持唯一。 (为什么把id作为主键?)因为原创 2017-05-19 11:34:59 · 3541 阅读 · 0 评论 -
【Hibernate】主键生成策略图示
Hibernate主键生成策略图示identity采用数据库生成的主键,用于为long、short、int类型生成唯一标识, Oracle 不支持自增字段. sequence DB2、Oracle均支持的序列,用于为long、short或int生成唯一标识。需要oracle创建sequence。原创 2017-05-19 11:37:11 · 3430 阅读 · 0 评论 -
【Hibernate】的运行过程如下
Hibernate的运行过程如下: 1、应用程序先调用Configuration类,该类读取Hibernate配置文件及映射文件中的信息,2、并用这些信息生成一个SessionFactory对象,3、然后从SessionFactory对象生成一个Session对象,4、并用Session对象生成Transaction对象; A、可通过Session对象的get(),l原创 2017-05-19 11:41:06 · 3823 阅读 · 0 评论 -
【hibernate】查询方式与区别
主键查询:session.get(Employee.class, 1); 主键查询session.load(Employee.class, 1); 主键查询 (支持懒加载) HQL查询:HQL查询与SQL查询区别:SQL: (结构化查询语句)查询的是表以及字段; 不区分大小写。HQL: hibernate query language 即hibern原创 2017-08-19 09:37:29 · 3166 阅读 · 0 评论 -
【Hibernate】中session的get()和load()有什么区别?
Hibernate中session的get()和load()有什么区别? # get()如果没有找到持久化类返回null,有可能导致空指针异常。 # load()如果没有找到持久化类直接抛出异常。 # get()是直接加载数据,load()是延迟加载,当使用被加载数据的时候才发送SQL。简而言之:Hibernate对于load()认为数据库一定存在,因此可以放心的原创 2017-08-20 10:00:50 · 311 阅读 · 0 评论 -
【Hibernate】设置inverse属性,在多对多种维护关联关系的影响?
1) 保存数据有影响。inverse=false ,有控制权,可以维护关联关系; 保存数据的时候会把对象关系插入中间表;inverse=true, 没有控制权, 不会往中间表插入数据。2) 获取数据无。3) 解除关系// 有影响。// inverse=false ,有控制权, 解除关系就是删除中间表的数据。// inverse=true, 没有控制权,原创 2017-08-21 19:11:40 · 1053 阅读 · 0 评论 -
org.hibernate.MappingException: Could not get constructor for org.hibernate.persister.entity.Single
Caused by: org.hibernate.MappingException: Could not get constructor for org.hibernate.persister.entity.SingleTableEntityPersister at org.hibernate.persister.internal.PersisterFactoryImpl.create(P原创 2017-08-22 08:12:52 · 5803 阅读 · 0 评论 -
java.lang.StackOverflowError at org.hibernate.collection.AbstractPersistentCollection.initialize(Ab
Java.lang.StackOverflowError错误如下:解决方法:可以将多的一方对象里面重写的toString方法去掉,或者两个对象里面重写的toString方法都去掉。注意:两个对象里面的tostring都去掉的话,打印出来不方便查看,所以建议去掉一方。原创 2017-08-22 15:12:42 · 596 阅读 · 0 评论 -
【Hibernate】对象的状态
对象的状态举例: User user = new User(); Hibernate中对象的状态: 临时/瞬时状态、持久化状态、游离状态。ü 临时状态特点: 直接new出来的对象; 不处于session的管理;数据库中没有对象的记录;ü 持久化状态当调用session的save/saveOrUpdate/get/load/list等方法的时候,对象原创 2017-08-22 15:43:48 · 228 阅读 · 1 评论 -
【Hibernate】基本数据类型对照表
Hibernate基本数据类型。(其中,boolean,yes_no和 true_false对应Java中的java.lang.Boolean)。映射类型 Java类型 标准SQL字段类型integer int or java.lang.Integer INTEGERlong long or java.lang.Long BIGINT原创 2017-08-29 21:04:22 · 421 阅读 · 0 评论 -
【Hibernate】中Query对象在获取表的所有的数据的时候,使用list()和 iterator()有什么区别?
Hibernate中Query对象在获取表的所有的数据的时候,使用list()和 iterator()有什么区别? # 编写代码的方式不同 list()和iterator() # 底层发送的SQL语句不同 list()直接一次性获取到所有持久化类的对象 iterator()先获取的是所有的数据的id值。当真正的遍历使用数据的原创 2017-08-20 10:02:16 · 616 阅读 · 0 评论 -
【Hibernate】简单集合映射
// javabean设计public class User { private int userId; private String userName; // 一个用户,对应的多个地址 private Set address; private List addressList = new ArrayList(); //private String[] addressArray;原创 2017-08-20 10:54:01 · 279 阅读 · 0 评论 -
【Hibernate】的一对多与多对一映射
1、代码&&图示Dept.javapublic class Dept { private int deptId; private String deptName; // 【一对多】 部门对应的多个员工 private Set emps = new HashSet(); ...}Emploee.javapublic class原创 2017-08-20 16:02:08 · 442 阅读 · 0 评论 -
【Hibernate】的Inverse属性
Inverse属性,是在维护关联关系的时候起作用的。 表示控制权是否转移。(在一的一方起作用) Inverse , 控制反转。默认为false不反转Inverse = false 不反转; 当前方有控制权True 控制反转; 当前方没有控制权 维护关联关系中,是否设置inverse属性:1. 保存数据 有影响。 如果设置控制反转,即i原创 2017-08-20 16:57:22 · 427 阅读 · 0 评论 -
【Hibernate】的cascade属性
删除部门时,如果部门有关联的员工且inverse属性为false,那么由于可以维护关联关系,它就会先把关联的员工的外键列设为null值,再删除自己。但是此刻希望删除部门时,就附带着把该部门下的所有员工都删掉,这时就需要引入cascade属性了。级联(cascade)当hibernate持久化一个临时对象时,在默认情况下,它不会自动持久化所关联的其他临时对象,而是会抛出Tra原创 2017-08-20 17:09:59 · 495 阅读 · 0 评论 -
【Hibernate】的inverse与cascade区别?
Cascade:Save-update 在session.save/update一个对象的时候,级联操作关联对象,关联对象或者执行save语句或者执行update语句或者什么都不执行Delete 在session.delete一个对象的时候,级联删除关联对象All Save-update和delete的结合2.inverseinverse属性用于指示本方原创 2017-08-20 17:14:43 · 313 阅读 · 0 评论