
hibernate
文章平均质量分 83
青春微凉不离殇
这个作者很懒,什么都没留下…
展开
-
Hibernate环境搭建跟配置
hibernate是一个ORM(对象关系映射)框架,将实体类对象和数据库数据关系做了映射,使我们操作数据库时,方便简单。hibernate对JDBC重复的操作做了封装,而且使用hibernate开发的项目,不管数据库怎么改变,都不用修改代码,是需要将配置文件中的信息修改为对应的数据库信息即可。下面示例简单介绍下hibernate的环境搭建跟配置。hibernate资源下载地址:http:/原创 2017-07-17 16:00:37 · 462 阅读 · 0 评论 -
hibernate属性设置cascade和inverse
cascade是级联操作,使得在操作一端数据时,可以级联操作被关联的另一端的数据。在多对一的关系中,多的一端不能操作级联为delete。一般在多的一端设为save-update。在一对多的关系中,如果一的一端设置为delete时,多的一端不能指明外键为非空。示例:Student类public class Student { private int id; private S原创 2017-08-03 19:29:30 · 484 阅读 · 0 评论 -
基于外键的一对一关系--单双向
基于外键关联的单向一对一关联和单向多对一关联几乎是一样的。唯一不同的就是单向一对一关联中的外键字段具有唯一性约束。需在单向多对一映射中的实体类多的一端配置unique=“true”。基于外键一对一映射可分为单向和双向两种。单向示例:Person类public class Person { private int id; private String name; priva原创 2017-08-03 20:51:04 · 737 阅读 · 0 评论 -
hibernate的N+1条SQL查询问题--Iterate和list
hibernate使用session.createQuery(hql)查询数据的时候,有两种查询方式1、session.createQuery(hql).list()2、session.createQuery(hql).iterate()通过项目案例来简单了解下,项目结构如下:Book实体类代码public class Book { private int id;原创 2017-08-18 07:44:05 · 931 阅读 · 1 评论 -
基于主键一对一关联映射--单双向
基于主键关联的单向一对一关联通常使用一个特定的id生成器。单向关联示例Person类public class Person { private int id; private String name; private int age; private IdCard idCard; //省略get/set方法}IdCard类public class IdCard { p原创 2017-08-04 08:28:34 · 701 阅读 · 0 评论 -
hibernate多对多关联--单双向
前几篇文章分别介绍了一对一、一对多的关联,下面我们来看下多对多的关联。多对多关联也分为单向和双向两种。单向关联示例Role类public class Role { private int id; private String name; private Set functions=new HashSet(); //省略get/set}Function类public cla原创 2017-08-04 10:27:14 · 343 阅读 · 0 评论 -
Hibernate缓存机制
hibernate缓存机制是hibernate中很重要的一个内容,我们来看下hibernate的缓存机制。hibernate缓存分为:一级缓存、二级缓存、查询缓存1、一级缓存 又称为session缓存,生命周期相同,周期较短。也称为事务级别的缓存。通过项目案例来简单了解下,项目结构如下:Book实体类public class Book { private原创 2017-08-18 17:37:30 · 465 阅读 · 0 评论 -
Hibernate的悲观锁、乐观锁
多个用户同时访问一个数据库,则当他们的事务同时使用相同的数据时可能会发生问题。由于并发操作带来的数据不一致性包括:丢失数据修改、读”脏”数据(脏读)、不可重复读、产生幽灵数据多个用户同时访问一个数据库,当他们的事务同时使用相同的数据时可能会发生问题。由于并发操作带来的数据不一致性包括丢失数据、修改、脏读、不可重复读、产生幽灵数据。为了解决并发问题hibernate提出了原创 2017-08-18 20:42:48 · 339 阅读 · 0 评论 -
Hibernate,悲观锁,乐观锁(二)
1.悲观锁它指的是对数据被外界修改持保守态度。假定任何时刻存取数据时,都可能有另一个客户也正在存取同一笔数据,为了保持数据被操作的一致性,于是对数据采取了数据库层次的锁定状态,依靠数据库提供的锁机制来实现。基于jdbc实现的数据库加锁如下:select * from account where name="Erica" for update在转载 2017-08-18 20:45:39 · 281 阅读 · 0 评论 -
hibernate的list映射和map映射
List映射Grade类public class Grade { private int id; private String name; private List students=new ArrayList(); //省略get/set方法}Student类public class Student { private int id; private String na原创 2017-08-14 11:40:17 · 529 阅读 · 1 评论 -
hibernate单表继承映射
hibernate支持三种基本的继承映射策略:1、每个类分层结构一张表映射2、每个子类一张表映射3、每个具体类一张表映射我们先来分析第一种策略,假设有一个父类Person,它有两个子类Teacher和Student,都继承了Person类,如图:我们可以把这种关系的数据,设计到一张表中展示,如图:下面我们来看下怎样来实现实体类和对应的映射关系来生成这张表。原创 2017-08-15 16:16:19 · 488 阅读 · 0 评论 -
hibernate继承映射策略之每个具体类一张表
对于“每个具体类一张表”的映射策略,可以采用两种方式。第一种方式是使用。另一种方法时采用隐式多态。以上一篇博客《hibernate单表继承映射》所述案列为例,我们主要学习第一种方式。与上篇文章不同的Person.hbm.xml配置文件 测试类:public class Hiberna原创 2017-08-15 17:37:36 · 368 阅读 · 0 评论 -
hibernate继承映射策略之每个子类一张表
以文章《hibernate单表继承映射》中的几个类为例,我们来看下“每个子类一张表”的映射策略。与之不同的是Person.hbm.xml配置文件,代码如下: 测试类:public class HibernateTest { @Test public void testCreate原创 2017-08-15 18:07:45 · 667 阅读 · 0 评论 -
hibernate抓取策略
抓取策略(fetching strategy)是指:当应用程序需要在(Hibernate实体对象图的)关联关系间进行导航的时候,Hibernate如何获取关联对象的策略。抓取策略可以在O/R映射的元数据中声明,也可以在特定的HQL或条件查询(Criteria Query)中重载声明。Hibernate定义了如下几种抓取策略:1、连接抓取(Join fetching)--Hibernate通原创 2017-08-17 20:27:20 · 363 阅读 · 0 评论 -
hibernate加载策略之lazy
一、hibernate的加载策略有两种:1)即时加载--get加载数据使用get获取数据,会立即查询,先到缓存中查找,找不到再到数据库中查找。2)延迟加载(懒加载lazy)--load加载不会立即查找,当需要的时候才会查找。容易造成LazyInitializationException异常。如果出现这个异常,大部分是因为session被关闭了,还要从session中获取数据造成原创 2017-08-17 15:24:06 · 498 阅读 · 0 评论 -
Hibernate生命周期
hibernate生命周期有瞬时状态、持久化状态、游离状态三个,下面分别介绍下这三个状态:1、瞬时状态(Transient) 使用new操作符初始化的对象就是瞬时状态,它们没有任何跟数据库表相关联的行为,只要应用不再引起这些对象(不再被任何其他对象所引用),它们的状态将会丢失,并由垃圾回收机制回收。2、持久化状态(Parsist) 1)持久化状态的对象是具有数据原创 2017-07-31 18:02:04 · 972 阅读 · 0 评论 -
hibernate.cfg.xml注解和*.hbm.xml配置文件详解
hibernate中有两个常见的配置文件hibernate.cfg.xml和*.hbm.xml下面分别详细介绍下这两个配置文件一、hibernate.cfg.xml配置文件内容和详解 com.mysql.jdbc.Driver jdbc:mysql:///hibernatetest root root org.hibernate.dialec原创 2017-07-19 15:35:37 · 2089 阅读 · 0 评论 -
使用SchemaExport生成数据库表
今天来演示下使用SchemaExport生成数据库表先来看下项目的整体架构:Score类public class Score { private int id; private int stuId;//学生id private int subjectId;//课程Id private double result;//分数 public int getId() {原创 2017-08-01 07:14:29 · 2847 阅读 · 0 评论 -
大对象映射
以学生类为例,有这样一种场景,假如有学生的头像、简介里面的值可能很大,通常情况下都是通过文件上传存到服务器上,数据库只放在服务器的地址即可但是现在我不想将信息放入磁盘,而是直接存入数据库中,这个时候就用到了Blob和Clob。通过下面的案例来简单了解下这两个对象在hibernate中的使用吧。1、在Student类中使用Blob(数据文件、图像、视频类型)和Clob(字符串文件类型)pub原创 2017-08-01 10:24:19 · 282 阅读 · 0 评论 -
组合主键映射
组合主键映射是指主键是多列的组合,因为考虑到数据库的优化,现在在设计数据库时很少使用。组合主键映射需要在映射配置文件中使用标签,该标签是指将一个类指定为相应的组合主键,它的name属性需要指定类文件中定义的属性值,并且在该标签中添加子标签。注:组合主键的使用其实很简单,但需要注意对象需要被拆分,主键自己需要一个类并且该类需要实现java.io.Serializable接口,其他属性再重新生原创 2017-08-01 08:53:02 · 868 阅读 · 0 评论 -
组件(Component)映射
在hibernate中,Component是某个实体的逻辑组成部分,它与实体的根本区别是没有oid(对象标识符),Component是一个被包含的对象,它作为值类型被持久化,而非一个实体。在hibernate中Component映射采用标签即可。示例:1、类Teacherpublic class Teacher { private int id; private String原创 2017-08-01 11:30:00 · 482 阅读 · 0 评论 -
hibernate注解之单/双向多对一映射
简单了解了hibernate注解annotation后,我们来看下怎样用注解实现单/双向的多对一映射。新建一个java项目,结构如下:单向多对一映射Book类package com.test.pojo;import java.util.Date;import javax.persistence.CascadeType;import javax.persistence.原创 2017-08-16 10:33:03 · 345 阅读 · 0 评论 -
单向多对一映射
在开发中,数据库表的关系有很多都是多对一的关联关系。如多个学生对应一个班级,通过下面的示例简单了解下在Hibernate中怎么处理这种多对一的关系。示例:班级Grade类public class Grade { private int id; private String name; //省略get/set方法}学生Student类public class Student原创 2017-08-02 07:11:04 · 504 阅读 · 0 评论 -
使用MyEclipse简化hibernate开发
1、配置数据库连接信息鼠标右击,选择new在弹出的数据库连接信息框中,完成信息填写,测试通过后点击finish2、为项目添加hibernate支持(我使用的是MyEclipse2013版)在新建的项目上,点击鼠标右键,选择MyEclipse ->Project Facets[Capabilities] -> Install Hibernate Face原创 2017-08-16 14:08:42 · 363 阅读 · 0 评论 -
hibernate查询语言--hql
hql(hibernate query language)是一种查询语言。hql是完全面向对象的查询语言,可以理解如继承,多态,关联等概念。hql区分大小写,但是对应sql关键字(select、from、where)不区分。新建一个java项目,结构如下:实体类Book代码@Entity@Table(name="t_book")@FilterDef(name="bf",pa原创 2017-08-16 18:33:35 · 499 阅读 · 0 评论 -
单向一对多映射和双向一对多映射
上一篇博客以学生类Student和年级类Grade为例介绍了单向多对一映射,我们还以这两个类来看下单向一对多映射,以学生类为多的一端年级类为一的一端。示例:学生类Studentpublic class Student { private int id; private String name; private int age; //省略get/set方法}年级类Grade原创 2017-08-02 16:47:24 · 1123 阅读 · 0 评论 -
Hibernate一对多单向关联和双向关联映射方法及其优缺点
一对多关联映射和多对一关联映射实现的基本原理都是一样的,既是在多的一端加入一个外键指向一的一端外键,而主要的区别就是维护端不同。它们的区别在于维护的关系不同:一对多关联映射是指在加载一的一端数据的同时加载多的一端的数据多对一关联映射是指在加载多的一端数据的同时加载一的一端的数据而单向一对多关联映射是在一的一端维护关系的,具有以下的缺点:必须先保存多的转载 2017-08-02 16:52:58 · 606 阅读 · 0 评论 -
hibernate注解annotation入门
前面的文章示例中我们写了实体类之后,都会写一个对应的*.hbm.xml配置文件,这种方式比较复杂,今天我们就来简单了解下使用注解annotation来替代配置文件的方法。新建一个java项目,结构如下:Book实体类,在实体类中使用注解,代码如下:package com.test.pojo;import java.util.Date;import javax.persist原创 2017-08-16 08:45:01 · 393 阅读 · 0 评论