随笔分类 -  Hibernate

开源数据库ORM框架hibernate的学习笔记
摘要:事务并发处理一、 数据库的隔离级别:并发性作用。1、 ReadUncommited(未提交读):没有提交就可以读取到数据(发出了Insert,但没有commit就可以读取到。)很少用2、 ReadCommited(提交读):只有提交后才可以读,常用,3、 RepeatableRead(可重复读):mysql默认级别, 必需提交才能见到,读取数据时数据被锁住。4、 Serialiazble(序列化读):最高隔离级别,串型的,你操作完了,我才可以操作,并发性特别不好,隔离级别是否存在脏读是否存在不可重复读是否存在幻读Read Uncommitted(未提交读)YYYRead Commited(提交 阅读全文
posted @ 2013-12-02 19:54 塞北鸿雁飞 阅读(406) 评论(0) 推荐(0)
摘要:hibernate缓存一、 Session级缓存(一级缓存)一级缓存很短和session的生命周期一致,因此也叫session级缓存或事务级缓存 hibernate一级缓存那些方法支持一级缓存: * get() * load() * iterate(查询实体对象)如何管理一级缓存: *session.clear(),session.evict()如何避免一次性大量的实体数据入库导致内存溢出 * 先flush,再clear如果数据量特别大,考虑采用jdbc实现,如果jdbc也不能满足要求可以考虑采用数据本身的特定导入工具二、 二级缓存Hibernate默认的二级缓存是开启的。 二级缓存也称为进程 阅读全文
posted @ 2013-12-02 19:50 塞北鸿雁飞 阅读(550) 评论(0) 推荐(0)
摘要:九、集合映射1、 Set2、 Lista)@OrderBy注意:List与Set注解是一样的,就是把Set更改为List就可以了privateListusers =newArrayList(); @OneToMany(mappedBy="group", cascade={CascadeType.ALL} ) @OrderBy("name ASC")//使用@OrderBy注解List中使用哪个字段进行排序,可以组合排序,中间使用逗号分开publicListgetUsers() {returnusers;}public voidsetUsers(List 阅读全文
posted @ 2013-12-02 19:45 塞北鸿雁飞 阅读(588) 评论(0) 推荐(0)
摘要:六、多对多 - 单向Ø一般的设计中,多对多关联映射,需要一个中间表ØHibernate会自动生成中间表ØHibernate使用many-to-many标签来表示多对多的关联Ø多对多的关联映射,在实体类中,跟一对多一样,也是用集合来表示的。(一) 实例场景:用户与他的角色(一个用户拥有多个角色,一个角色还可以属于多个用户)(二) 对象模型:(三) 关系模型:(四) 实体类Role实体类:public classRole {private intid;privateString name;public intgetId()returnid;}public v 阅读全文
posted @ 2013-11-25 19:45 塞北鸿雁飞 阅读(2035) 评论(0) 推荐(0)
摘要:三、多对一–单向场景:用户和组;从用户角度来,多个用户属于一个组(多对一 关联)使用hibernate开发的思路:先建立对象模型(领域模型),把实体抽取出来。目前两个实体:用户和组两个实体,多个用户属于一个组,那么一个用户都会对应于一个组,所以用户实体中应该有一个持有组的引用。(一) 对象模型图:(二) 关系模型:(三) 关联映射的本质: 将关联关系映射到数据库,所谓的关联关系是对象模型在内存中一个或多个引用。(四) 实体类User实体类:public classUser {private intid;privateString name;privateGroup group;publicGr 阅读全文
posted @ 2013-11-25 19:43 塞北鸿雁飞 阅读(478) 评论(0) 推荐(0)
摘要:一、一对一关联映射²两个对象之间是一对一的关系,如Person-IdCard(人—身份证号)²有两种策略可以实现一对一的关联映射Ø主键关联:即让两个对象具有相同的主键值,以表明它们之间的一一对应的关系;数据库表不会有额外的字段来维护它们之间的关系,仅通过表的主键来关联。Ø唯一外键关联:外键关联,本来是用于多对一的配置,但是如果加上唯一的限制之后,也可以用来表示一对一关联关系。对象模型实体类:/**人-实体类*/public classPerson {private intid;privateString name;public intgetId() {r 阅读全文
posted @ 2013-11-25 19:39 塞北鸿雁飞 阅读(755) 评论(1) 推荐(1)
摘要:一、 Xml方式标签必须配置在标签内第一个位置。由一个字段构成主键,如果是复杂主键标签被映射的类必须定义对应数据库表主键字段。大多数类有一个JavaBeans风格的属性, 为每一个实例包含唯一的标识。 元素定义了该属性到数据库表主键字段的映射。 (1) name (可选): 标识属性的名字(实体类的属性)。(2) type (可选): 标识Hibernate类型的名字(省略则使用hibernate默认类型),也可以自己配置其它hbernate类型(integer, long, short, float,double, character, byte, boolean, yes_no, true 阅读全文
posted @ 2013-11-25 19:33 塞北鸿雁飞 阅读(1120) 评论(0) 推荐(0)
摘要:1、在hibernate中持久化对象有三个状态,这个面试时可能会问到:(1)transient瞬时态:在数据库中没有与之匹配的数据,一般就是只new出了这个对象,并且在session缓存中也没有即此对象没有纳入session的管理,此状态的对象不能直接存入数据库(会抛出TransientObjectException)。(2)persistent持久态:在数据库中有与之匹配的数据,并且纳入了session的管理(一般就是执行了save、update、load、 get后的对象),在提交事务时(清理session缓存时)会和数据库同步更新,持久态对象才可以存入数据库。(3)detached游离态 阅读全文
posted @ 2013-11-20 21:49 塞北鸿雁飞 阅读(383) 评论(0) 推荐(0)
摘要:Hibernate是一个开放源代码的ORM(对象关系映射)框架,它对JDBC进行了轻量级的封装,Java程序员可以使用面向对象的编程思维来操纵数据库,它通过对象属性和数据库表字段之间的映射关系,将对象持久化到数据库中,可以说Hibernate就是将数据从对象形式转换成表字段后存入数据库的一种框架。hibernate移植非常好,因为它用到了方言配置,可以根据不同的数据库自动发出不同的sql。 1、环境准备: 1)去Hibernate官网下载最新的hibernate文件,笔者版本号为hibernate-release-4.2.3.Final; 2)文档内自带了说明文档,不过只有英... 阅读全文
posted @ 2013-11-20 21:17 塞北鸿雁飞 阅读(833) 评论(0) 推荐(0)
摘要:1、首先加入slf4j的jar包,即slf4j-api-1.6.1.jar在hibernate官网下载hibernate-release-4.2.2.Final.zip并解压,在hibernate-release-4.2.2.Final\lib\optional\ehcache目录里slf4j-api-1.6.1.jar2.加入log4j-1.2.15.jar,即slf4的log4j实现在hibernate-release-4.2.2.Final.zip里没有,所有要到网上搜一下下载。3、slf4j怎么将日志转成log4j?加入slf4j-log4j12-1.6.1.jar转换包在hibern 阅读全文
posted @ 2013-11-03 22:07 塞北鸿雁飞 阅读(1233) 评论(0) 推荐(0)
摘要:自己总结下hibernate4.1版本中的新特性和hibernate3.3做区别1.数据库方言设置org.hibernate.dialect.MySQL5Dialect在3.3版本中连接MySQL数据库只需要指明MySQLDialect即可。在4.1版本中可以指出MySQL5Dialect2.buildSessionFactory4.1版本中buildSessionFactory()已经被buildSessionFactory(ServiceRegistry ServiceRegistry)取代解决办法:Configuration cfg = new Configuration();cfg.c 阅读全文
posted @ 2013-11-02 13:40 塞北鸿雁飞 阅读(558) 评论(0) 推荐(0)