
JAVAEE框架
软件开发那些事儿
java软件开发8年经验,目前为架构师
展开
-
org.hibernate.NonUniqueObjectException
<br />org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [com.xie.hibernate.modal.Org#2]<br /> <br />非唯一对象异常,这是因为:在hibernate实体类中加上了@GeneratedValue,同时还在生成对象时手动给id赋值,在向数据哭中存放数据记录原创 2010-12-22 20:56:00 · 973 阅读 · 0 评论 -
事务隔离机制(hibernate 应用)
<br />1.事务的特性:<br />acid:atomic原子性不用多说 consistent一致性就是系统的数据不会遭到破坏 isolated隔离性防止同时读取同一条记录 durable持久性保存在db或其它形式的持久设备中<br /><br />隔离级别的几个重要概念<br /> 脏读:事务 A 事务B A对一条记录修改但未提交,B此时读取此条记录,之后Acommit失败<br /> 不可重复读:事务 A 事务B A里面执行两次或以上的查询,查询的结果不对,在中间B对此记录改变了<br原创 2011-01-07 21:48:00 · 2022 阅读 · 0 评论 -
hibernate一级缓存,二级缓存,三级缓存,缓存算法及配置。
<br />什么是缓存(我的理解):在内存中开辟一块空间,把原来在硬盘上的东西,放到内存当中,当需要用到一些数据时,直接在内存中查找,而不是到硬盘上查找。这块内存中的空间就是缓存。缓存能提高程序的运行效率。<br />一级缓存(session级的缓存):在一个session中load同一个对象2次,load时,hibernate首先在session缓存中查找对象,如果没找到就到数据库中去load。因此,在同一个session中load一个对象2次,只会发出一条sql语句。而在2个session中load同一原创 2010-12-27 23:05:00 · 20373 阅读 · 1 评论 -
hibernate查询的结果用list和iterate存放的不同之处
<br />①List:直接取出所有的记录将其封装成对象放到集合中。<br />Iterator:先取出所有记录的id(主键),当需要用到对应的id的记录时,再根据id发sql语句。②list不会主动利用session级的缓存,因此list遍历时每次会到数据库中取数据。<br />Iterator会利用session的缓存,Iterator每次会到缓存中找,如果缓存中没有,再到数据库中取数据。<br />③Iterator默认使用二级缓存<br />list默认往二级缓存存数据,但是查询时不使用二级缓存。原创 2010-12-27 21:57:00 · 1389 阅读 · 0 评论 -
hibernate查询的1+n问题
<br /> 在多对一关系中,当我们需要查询多的一方对应的表的记录时,可以用一条sql语句就能完成操作。然而,在多的一方的实体类中的@ManyToOne标注的fetch的默认值是eager,这时,hibernate除了发出查询多的一方对应的表的记录的sql语句外,还会发出n(多方记录数)条sql语句,这就是1+n问题。如:bbs的板块(Category),主题(topic),回复(msg)。一个板块有多个主题,而一个主题属于一个板块,则Category和topic属于一对多的关系,在topic里设置原创 2010-12-27 21:54:00 · 3729 阅读 · 0 评论 -
Hibernate查询(Query Language,hql,ejbql,nativeql,qbc,qbe)
<br />1.nativeSQL(本地sql,功能强大)>HQL>EJBQL(是hql的子集)>QBC(query by cretra,cretra接口查询)>QBE<br />nativeSQL:本地sql,利用jdbc接口,完成本地数据库查询。功能最强大<br />hibernateQL:hibernate实现的jpa标准的查询语言,功能也很强大。<br />ejbQL:这是jpa定义的查询接口的实现。可以看成是hql的子集。<br /><br /><br />QBC(Query by criteri原创 2010-12-27 21:48:00 · 1439 阅读 · 0 评论 -
hibernate继承关系的映射(single_table,class_per_table,joined)
<br />hibernate对象之间存在继承关系,该如何映射呢?有3中方式,反映在数据库表上:<br />Single table:Student和Teacher类的父类是Person类,用一张数据库表反应3个类的所有信息。这样设计的缺点是:表的信息反映了所有类的属性,造成大量的数据冗余。<br />Table per class:为每个类设计一张表,其缺点是:<br />Joined:用一张表存共有的字段,而其子类对应的表存其特有字段。优缺点:查询能提高效率,然而需要作表连接,当添加新的子类时,需要添加原创 2010-12-22 22:51:00 · 4158 阅读 · 0 评论 -
树状结构的设计(把一棵树存入数据库的hibernate映射,及数据库表的设计)
<br />数据库模型(id-pid):一个父亲有多个孩子,而一个孩子只有一个父亲,这样的结构就是一颗树。在数据库表中,设计的是id和pid(parent_id)。通过id和pid就存放一颗树了。<br />从面向对象的设计角度出发,在树的节点类中不宜放pid,一个节点有1个或者0个父亲,而有0个或者孩子。因此设计如下:这是一个组织机构,每个机构有父机构和子机构。<br />package com.xie.hibernate.modal;<br /> <br />import java.util.HashS原创 2010-12-22 21:21:00 · 4303 阅读 · 3 评论 -
hibernate对象关系映射(一对一,一对多,多对一,多对多的单向,双向映射)
<br />对象之间的关系:<br />关系映射之间的关系只的是对象之间的关系,并不指数据库表的关系(外键关系)这儿解决的问题是当对象之间的关系之一时,数据库表该如何映射,编程上如何对待。<br /> <br /><br />一对一(主键关联,和单向的外键关联)<br /> ①单向(主键,外键)Husband和Wife表,a,主键关联 b,外键关联(wife为parent),c,主键关联 d,外键关联(husband为parent)<br />一对一单向外键关联:<br />annotation:@on原创 2010-12-22 21:46:00 · 5095 阅读 · 0 评论 -
Hibernate事务处理的悲观锁和乐观锁
<br />为了考虑并发的效率,把hibernate.connection.isolation设置为2,同时还要解决重复读和幻读的问题。<br />①悲观锁:(需要依赖于数据库的锁),悲观锁的思想是:每次执行一个事务,这个事务都认为一定会有其它的事务来干扰自己。所以悲观锁的做法是,不管有没有事务将要来干扰自己,一上来就将自己需要操作的东西加上锁,直到自己操作完了才让别的事务操作。这种设计的缺点是效率降低。<br /><br /> select<br /> account0_.id as原创 2011-01-07 22:39:00 · 1959 阅读 · 0 评论