
Hibernate框架
文章平均质量分 86
光仔December
技术宅,系统集成项目管理工程师,FCP-报表开发工程师,全国软件开发(C/C++)专业人才高级认证,2014年ACM-ICPC河南省赛区银奖,2014年第五届蓝桥杯河南赛区C/C++程序设计本科B组二等奖,2015年甲骨文杯全国Java程序设计大赛华中赛区A组二等奖,2015年中国大学生计算机设计大赛团队三等奖
展开
-
【hibernate框架】事务并发处理
事务并发处理:a)事务:ACID(事务的四个特性) i.Atomic(原子性)、Consistency(一致性)、Itegrity(独立性)、Durability(持久性)A:要么全部执行,要么不执行。C:事务的运行不该变数据库中数据的一致性。I:两个以上的事务不会出现交错执行的状态。D:事务运行以后,系统的更新是永久的,不会无缘无故的回滚。b)事务并发时可原创 2015-03-10 15:33:14 · 1280 阅读 · 0 评论 -
【hibernate框架】性能优化之session.clear()的运用和Java内存泄露问题
注意session.clear()的运用,尤其在不断分页循环的时候。a)在一个大集合中进行遍历,遍历msg,取出其中的含有敏感字样的对象。hibernate里面有一个缓存,是session级的缓存。一张表里面存了上百万的商品信息,我们要取出这些内容并且进行分页,点击下一页查看商品信息,现在假设在同一个session里面执行这个操作,这时候就会有问题。session先取50条进来,然后再原创 2015-02-25 15:18:52 · 2762 阅读 · 1 评论 -
【hibernate框架】EJBQL第一部分
总结:QL应该和导航关系结合,共同为查询提供服务。导航写全面了,QL语句就可以写的简单。例子项目:BBS小项目(EJBQL是HQL的子集,所以直接说是HQL也无可厚非)Category(版块):里面有不同的主题,不同的主题有不同的发帖Topic(主题),Msg(具体的回复帖子)Category与Topic之间的关系是一对多(OneToMany),Topic与Msg的关系原创 2015-02-23 18:20:30 · 1561 阅读 · 0 评论 -
【hibernate框架】性能优化之list_iterate的不同之处
list与iterate的不同之处:还是用上一次的例子,话题topic和版块categoryTopic.java:package com.bjsxt.hibernate;import java.util.ArrayList;import java.util.Date;import java.util.List;import javax.persistence.Entit原创 2015-02-25 15:13:47 · 1759 阅读 · 0 评论 -
【hibernate框架】EJBQL第二部分
工程和上一个一样,Topic有所改变,加了一个Topic的Msg的List列表属性,这个属性用来存放每个Topic下有多少条回帖。例子项目:BBS小项目(EJBQL是HQL的子集,所以直接说是HQL也无可厚非)Category(版块):里面有不同的主题,不同的主题有不同的发帖Topic(主题),Msg(具体的回复帖子)Category与Topic之间的关系是一对多(On原创 2015-02-23 20:10:28 · 1130 阅读 · 0 评论 -
【hibernate框架】面向对象的查询语法(QBE和QBC)
QBC和QBEQBC:(Query By Criteria)Criteria是Criterion的复数,是"标准、准则、约束"的意思。用法:@Testpublic void testQBC() { Session session = sf.openSession(); session.beginTransaction(); //criterion 标准/准则/约原创 2015-02-25 15:06:06 · 1689 阅读 · 0 评论 -
【hibernate框架】多对多单向关联(Annotation实现)
什么情况下是多对多?举个例子:一个老师可以教多个学生,每个学生也可以被多个老师教。这就是多对多的情况。在数据库表中这种关系该怎么设计?很简单,加一张中间表。设计模型:table_student id table_teacher id 中间表:T_S t_id s_id 比如老师2教学生1,在中间表中就存2,1老师2教学生3,在中间表中就原创 2015-02-11 12:28:17 · 909 阅读 · 0 评论 -
【hibernate框架】多对多单向关联(XML实现)
什么情况下是多对多?举个例子:一个老师可以教多个学生,每个学生也可以被多个老师教。这就是多对多的情况。在数据库表中这种关系该怎么设计?很简单,加一张中间表。设计模型:table_student id table_teacher id 中间表:T_S t_id s_id 比如老师2教学生1,在中间表中就存2,1老师2教学生3,在中间表中就原创 2015-02-11 12:24:47 · 925 阅读 · 0 评论 -
【hibernate框架】一对多(多对一)双向关联(Annotation实现)
用户和组的关联,一个用户只能属于一个组,一个组可以拥有多个用户User.java:package cn.edu.hpu.one2many;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Id;import javax.persis原创 2015-02-11 12:22:02 · 947 阅读 · 0 评论 -
【hibernate框架】继承映射
A.继承映射简述举个实例:Person类、Student类,Teacher类。Person类里面有几个属性:nameStudent类里面有几个属性:除了name还有分数scoreTeacher类里面有几个属性:除了name还有职称title如何用数据库表来表示这些关系呢?下面说说继承映射的三种主要设计1.设计一可以设置一张表:id name原创 2015-02-22 12:47:05 · 1279 阅读 · 0 评论 -
【hibernate框架】几种集合映射
1.Set前面我们已经用过,就不再说。2.ListGroup.java:package cn.edu.hpu.listMapping;import java.util.ArrayList;import java.util.List;import javax.persistence.CascadeType;import javax.persistence.Enti原创 2015-02-22 11:55:11 · 1456 阅读 · 0 评论 -
【hibernate框架】练习-树状结构设计(非常重要)
作业:树状结构的设计在同一个类中使用OneToMany和ManyToOne首先想数据库的模型,再想面向对象的模型,然后再来想怎么去做映射,做完映射在想怎么去做CRUD。1.首先设计数据库的模型应该是Id、parent_Id.单一父亲,好多孩子这就是一棵树。数据库首先存在的属性有:Id parent_Id name例子:ID Parent_ID原创 2015-02-22 12:58:25 · 3292 阅读 · 0 评论 -
【hibernate框架】练习-学生、课程、分数的设计(重要)
学生、课程、分数的设计(重要)表设计:方法1:设置联合主键@EmbeddedId实现Serializable接口student:id namecourse:id namescore:studentid courseid score//联合主键联合id//有点麻烦不写了,直接看方法2吧方法2:student:id namecourse:id n原创 2015-02-23 18:07:29 · 2493 阅读 · 0 评论 -
【hibernate框架】一对多(多对一)双向关联(XML实现)
用户和组的关联,一个用户只能属于一个组,一个组可以拥有多个用户User.java:package cn.edu.hpu.one2many;public class User { private int id; private String name; private Group group; public Group getGroup() { return group原创 2015-02-11 12:19:58 · 2125 阅读 · 0 评论 -
【hibernate框架】使用hibernate实现悲观锁和乐观锁
四种隔离机制不要忘记:(1,2,4,8)1.read-uncommitted:能够去读那些没有提交的数据(允许脏读的存在)2.read-committed:不会出现脏读,因为只有另一个事务提交才会读取来结果,但仍然会出现不可重复读和幻读现象。4.repeatable read:MySQL默认。可重复读,读数据读出来之后给它加把锁,其他人先别更新,等我用完了你再更新。你的事务没完原创 2015-03-10 15:48:56 · 4776 阅读 · 0 评论 -
【hibernate框架】缓存机制之查询缓存
查询缓存是面对重复缓存的,是依赖于二级缓存的,所以一定要打开二级缓存。1.load默认使用二级缓存,iterate默认使用二级缓存2.list默认往二级缓存中加数据,但是查询的时候不使用3.如果要query用二级缓存,需打开查询缓存i.tureii.调用Query的setCacheable(true)方法指明使用二级缓存。证明查询缓存已经起作用了:@Test原创 2015-03-08 12:56:29 · 1366 阅读 · 0 评论 -
【hibernate框架】缓存机制之一级缓存
什么是缓存:我们在内存中开辟一块空间,把本来应该存储在硬盘上的东西,然后给它放在内存里,将来要读的时候从内存中读,这个部分就叫做缓存。在hibernate有三种缓存,一级缓存,二级缓存和查询缓存。一级缓存是session级别的缓存。例子:@Testpublic void testHuanCun(){ Session session = sf.openSession();原创 2015-03-08 12:35:40 · 1238 阅读 · 0 评论 -
【hibernate框架】缓存机制之二级缓存
二级缓存是sessionFactory级别的缓存,可以跨越session存在。hibernate文档里关于二级缓存的说明:二级缓存(The Second Level Cache)hibernate支持多种多样的二级缓存的实现,但hibernate本身并没有写二级缓存的实现(有一个是用来内部测试的,不要用于产品开发),而是由其他的厂商来提供。表 21.1. 缓存策略提供商(C原创 2015-03-08 12:45:22 · 3802 阅读 · 0 评论 -
【hibernate框架】一对多(多对一)双向CRUD-Cascade1
下面对一对多(多对一)的关联关系的CRUD进行测试。这里用的是注解AnnotationUser.java:package cn.edu.hpu.one2many;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Id;i原创 2015-02-15 15:26:07 · 1098 阅读 · 0 评论 -
【hibernate框架】多对多双向关联(Annotation实现)
多对多的双向关联:(非常少用)通过老师可以知道他教了多少学生,这是单项多对多。而如果同时通过学生知道有多少个老师教他,那么就是多对多双向的关联。Annotation实现:Student.java:package cn.edu.hpu.many2many;import java.util.HashSet; import java.util.Set;import原创 2015-02-13 15:43:16 · 947 阅读 · 0 评论 -
【hibernate框架】一对多(多对一)双向CRUD-Fetch2
继续对Fetch注解进行测试User.java:package cn.edu.hpu.one2many;import javax.persistence.CascadeType;import javax.persistence.Entity;import javax.persistence.FetchType;import javax.persistence.Generated原创 2015-02-15 15:41:21 · 1447 阅读 · 0 评论 -
【hibernate框架】一对多(多对一)双向CRUD-Cascade2
现在反向测试Group是否能关联User存储。User.java:package cn.edu.hpu.one2many;import javax.persistence.CascadeType;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persisten原创 2015-02-15 15:31:56 · 911 阅读 · 0 评论 -
【hibernate框架】一对多(多对一)双向CRUD-Fetch1
关于把数据从里面拿出来是什么样子。User.java:package cn.edu.hpu.one2many;import javax.persistence.CascadeType;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persisten原创 2015-02-15 15:35:02 · 1335 阅读 · 0 评论 -
【hibernate框架】hibernate遇到的几个异常解决
今天使用hibernate3.6.5自己配置jar lib,在测试时遇到了几个异常如下:1.java.lang.NoSuchFieldError: INSTANCE 解决:删除hibernate-annotations.jar。2.java.lang.ClassCastException: org.hibernate.annotations.commo原创 2015-01-25 18:33:16 · 2714 阅读 · 0 评论 -
【hibernate框架】性能优化之1+N问题
1+N问题/典型的面试题a)Lazyb)BatchSizec)join fetch什么是1+N:如果我在一个对象里面关联另外一个对象,同时fetch=FetchType.EAGER,最典型的是@ManyToOne。本来我用一条Sql语句就可以解决的,结果发了1条外加N条sql语句。1+N问题实例剖析Category.java:package com.bjsx原创 2015-02-25 15:12:23 · 2264 阅读 · 0 评论 -
【hibernate框架】多对一单向关联(XML实现)
一个组有多个用户,一个用户只能属于一个组。使用XML来实现多对一单项关联Group.java:package cn.edu.hpu.many2one;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Id;import java原创 2015-02-09 21:06:25 · 939 阅读 · 0 评论 -
【hibernate框架】一对多(多对一)双向CRUD-关于delete2
如果没有关联关系,平常我们使用save、get、update、delete方法即可对实体对象进行增删改查,但是一旦实体对象有关联关系的时候,就不能直接使用save、get、update、delete方法了,就要进行一系列的语句拆分和组合。牵扯到对一个实体对象做操作,是否要对关联的另外一个实体对象做操作。这里来探讨一下删除delete“多对一”中“多”这一方的问题:User.原创 2015-02-20 18:25:04 · 1552 阅读 · 0 评论 -
【hibernate框架】一对多(多对一)双向CRUD-关于update
如果没有关联关系,平常我们使用save、get、update、delete方法即可对实体对象进行增删改查,但是一旦实体对象有关联关系的时候,就不能直接使用save、get、update、delete方法了,就要进行一系列的语句拆分和组合。牵扯到对一个实体对象做操作,是否要对关联的另外一个实体对象做操作。这里来探讨一下更新update在“多对一”关联关系中的问题:原创 2015-02-20 18:29:17 · 4099 阅读 · 2 评论 -
【hibernate框架】核心开发接口-load和get方法
Load方法,从数据库里取数据,并封装成JAVA对象。示例:public void testLoad(){ Configuration cfg=new AnnotationConfiguration(); SessionFactory sf=cfg.configure().buildSessionFactory(); Session session=sf.openSession原创 2015-01-31 16:46:05 · 1575 阅读 · 0 评论 -
【hibernate框架】核心开发接口-Configuration接口
Configuration接口:a)AnnotationConfigurationb)进行配置信息的管理c)用来产生SessionFactoryd)可以在configure方法中指定hibernate配置文件e)只需关注一个方法即:buildSessionFactory()1.关于Configuration什么叫做Configuration?new原创 2015-01-31 16:33:31 · 1506 阅读 · 0 评论 -
【hibernate框架】如何配置联合主键-XML与Annotation样例剖析
首先看看什么是联合主键:联合主键一般以表中的两个或两个以上的元素作为主键。一般的联合主键,在数据库中设置就可以了。但是,如果你想用hibernate对主键做映射的话,则需要用面向对象的方法去操作它。那么,如何用面向对象的方法去得到它呢?而又如何以面向对象的方式分配主键呢?有两种方式:XML配置联合主键和Annotation配置联合主键。XML配置原创 2015-01-30 11:58:09 · 1834 阅读 · 0 评论 -
【hibernate框架】对象的三种状态Transient-Persistent-Detached
三种状态分别是Transient(游离状态),Persistent(持久化状态),Detached(脱管状态)。Teacher t=new Teacher();t.setName("t12");//游离状态t.setTitle("中级");//游离状态t.setBrithday(new Date());//游离状态t.setZhicheng(ZhiCheng.A);//游离原创 2015-01-31 16:45:00 · 1768 阅读 · 0 评论 -
【Hibernate框架】Hibernate入门
Hibernate是目前最流行的ORM框架。ORM的全称是Object/Relation Mapping,对象/关系数据库映射。当我们采用ORM框架之后,应用程序不再直接访问底层数据库,而是以面向对象的方式来操作持久化对象(例如创建、删除等),而ORM框架则将这些面向对象的操作转化成底层的SQL操作。ORM用最直白的话来说就是:一大堆的类库,我们用面向对象的原创 2014-12-08 12:03:35 · 1223 阅读 · 0 评论 -
【hibernate框架】uuid与native生成ID的样例-XML配置
native算法生成随机id:native根据底层数据库的能力选择 identity、sequence 或者 hilo 中的一个。native算法指定的字段类型:用mysql,你需要设置主键bigint, autoincreament (大数,自增)用oracle,你需要设置主键bigint, sequence 这样才能在hibernate中指定native原创 2015-01-30 11:42:47 · 5325 阅读 · 0 评论 -
【hibernate框架】用Annotation注解表示id生成策略
前面已经说过用XML配置ID生成策略的两个例子:http://blog.youkuaiyun.com/acmman/article/details/43305177这里简单说一下用Annotation如何设置ID的生成策略:除了在XML文件中去指定id的生成策略,还可以用Annotation中的注解去指定id的生成策略。方法:@Id @GeneratedValue publ原创 2015-01-30 11:49:05 · 3078 阅读 · 0 评论 -
【hibernate框架】hibernate的ID的生成策略剖析
1.设置id的原因我们表里面一般有一个id作为主键,一般id不需要手动去传值的。在实际工作中,在数据库中建表的时候,id在数据库中都是设置成自增字段。对于类的对象里面的字段,就无法指定自增,需要靠程序自动的生成或者靠数据库来帮我们自动的生成。Jpa/hibernate就已经实现了这样的能力,你可以通过设置来告诉它id怎么样生成,这样你写程序的时候就不用设置i原创 2015-01-27 13:08:02 · 1323 阅读 · 0 评论 -
【hibernate框架】了解什么是JPA
JPAJPA全称Java Persistence API.JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。总的来说,JPA包括以下3方面的技术:1.ORM映射元数据JPA支持XML和JDK5.0注解两种元数据的形式,元数据描述对象和表之间的映射关系,框架据此将实体对象持久化到数据库表中;2.API原创 2015-01-27 12:53:16 · 1222 阅读 · 0 评论 -
【hibernate框架】各种问题用注解Annotation和mxl配置的解决
1.表名和类名不同,对表名进行配置a)Annotation:一般说来,表名一定要和实体类的名称一样。但如果表明和实体类名不一致,可以用以下两种方式指明实体类对应的表名:1.Annotation情况下:package cn.edu.hpu.model;import javax.persistence.Entity;import javax.pers原创 2015-01-27 12:58:35 · 1491 阅读 · 2 评论 -
【hibernate框架】使用Annotation注解进行实体类操作
上一篇讲的是hibernate的环境搭建,因为现在大部分公司在使用Annotation来操作实体类进而进行表的建立,免去了写Xxx.hbm.xml表映射文件的烦恼,所以我再写一个用Annotation来操作实体类的例子:导包什么的我就不说了,详情看上一篇吧,直接切入主题:1.首先说说什么是注解(Annotation),这个学过Java基础的人应该不陌生,这里只说一下在hiberna原创 2015-01-25 18:27:50 · 1835 阅读 · 4 评论 -
【hibernate框架】核心开发接口-update方法
1.更新一个Detached(脱管状态)对象,把它重新变成Persistent(持久化状态),然后在数据库里做更新。示例:public void testUpDate1(){ Configuration cfg=new Configuration(); SessionFactory sf=cfg.configure().buildSessionFactory(); Ses原创 2015-02-02 16:33:14 · 1508 阅读 · 0 评论