- 博客(20)
- 资源 (102)
- 收藏
- 关注
原创 四种并发异常,四种相应的隔离级别--数据库事务的复习
印象中这是在博客里第三次重提数据库事务的隔离级别了。这一块内容有一点绕,当时弄明白了,过一段时间又会忘记。我觉得掌握数据库事务隔离级别的窍门在于:罗列出事务在并发时会发生哪些异常情况,什么样的隔离级别会杜绝这种异常情况的发生。下面就按照这个思路把数据库事务隔离级别再复习一遍。 第一种可能出现的异常情况:丢失更新(Lost Update)数据库事务隔离级别:Read Uncommitted
2010-05-26 17:27:00 9922 1
原创 关于Boolean类型在flex与java中间传递的问题
最近在开发过程中发现一个问题:Boolean类型的值无法在flex和java间传递,经过一段研究发现,问题出现在Boolean类型的getter和setter方法上。 按照javabean的规范,小布尔类型的getter是以is做前缀的,但是大布尔类型的getter就成了以get为前缀了(大布尔作为引用类型,已经被视为普通的Object了)。例如: 对于字段
2010-05-26 11:18:00 6093
原创 Join取代不了Fetch,Fetch的独到之处在于打通了对象间的关联关系
确认一个问题:1.通过Join获得的集合,即使是集合的全体,在通过它的宿主对象访问这个集合时,还是会重新生成SQL来加载这个集合?验证结果:的确如此。看来Hibernate还没有如此智能。这个问题也从侧面解释了join和fetch的不同:join可以有过滤条件,不一定会将关联对象全部取出。但是fetch总是是将关联对象全部取出的。经过join加载出的对象应被视为独立的个体,
2010-05-16 11:51:00 4608
原创 如何抓取平行集合
join抓取两个以上的平行集合会产生笛卡尔积,而如果使用subselect抓取又会失去动态抓取集合其他依赖对象的机会。要怎样才能动态地抓取平行集合呢?目前我能想到的一种方法就是生成多条select,分别抓取平行集合。我觉得这并不是一个很完美的方案,但是它却实是可行的。以Forum为例,在某个use case中我们需要加载一个Forum,同时要显示它的所有Thread以及Moderator.
2010-05-12 10:39:00 4810
原创 关于idbag
前一篇文章提到了不能抓取两个以上的平行bag,而idbag是不存在这个问题的。原因就在于idbag会为其每个元素生成一个id,这样就可以区分不同元素了。bad因为无法区分元素带来了两个大问题:1.bag集合的更新效率非常低。因为对于一个修改过的bag集合,hibernate无法准确得知修改的元素对应于数据库中那一条记录,这样,hibernate就无法准确更新变动的记录,它只能把所有元素删除,再将集
2010-05-11 18:16:00 4956
原创 为什么Hibernate不允许同时抓取两个和两个以上的平行bag集合
在hibernate中, 如果试图同时抓取两个或两个以上平行的bag集合,会抛出这个异常:org.hibernate.HibernateException: cannot simultaneously fetch multiple bags。对于这种情况,Hibernate文档给出的解释是:The resultset of a product can’t be converted into
2010-05-11 16:10:00 5174
原创 JPA和Hibernate抓取策略的差异
Hibernate和JPA的抓取策略是有差异的。这一点在使用JPA注解时会有所体现。有时候我们需要添加一些hibernate独有的注解才能实现比较好的抓取。下面简单提几点。 所谓“抓取策略”,总要涉及两个问:何时抓取以及如果抓取。这两点在Hibernate提供的注解上体现的非常明显。Hibernate提供两套注解分别用来描述“何时抓取”和“如何抓取”。这样
2010-05-10 18:07:00 7656
原创 Hibernate的四种抓取策略
subselect fetching是hibernate特有的抓取策略。它在抓取时机上有些介于lazy和eager之间(只是这样说,它实际上是配合lazy的一种抓取策略)。 一方面,它是在集合第一次被访问时才进行抓取,这有一些lazy的意味。但同时它的确预先抓取了一些“额外”的数据出来,而这些数据是要在后面使用到的,从而避免了多次select,这又有些eager的意味。 subselect比sel
2010-05-10 11:00:00 4878
原创 在Hibernate环境下对大型集合的处理
在Hibernate环境下,对大型集合的访问管理是一个非常值得重视的问题。一次将大型集合加载到内存是不能容忍的。因此在操作这种集合时要特别小心。下面给出一些建议。1.使用@org.hibernate.annotations.LazyCollection(org.hibernate.annotations.LazyCollectionOption.EXTRA)注解大型集合,确保在访问集合的s
2010-05-10 10:51:00 4824
原创 两种极端情况的案例:N+1次查询和笛卡尔积
前一篇文章两种极端:频繁的查询和巨大的结果集讲到了Hibernate加载数据时可能会出现的两种极端情况:频繁的查询和一次查出巨大的结果集。其中:N+1次查询是前一种情况的一个典型案例,笛卡尔积则是后一种情况的典型案例。下面分别简单地再总结一下这两种极端案例出现的原因以及调优方法。 一.N+1次查询 如果一个集合是lazy loading的,那么在第一次访问到这个集合时,hib
2010-05-09 14:57:00 6026
原创 两种极端:频繁的查询和巨大的结果集
写到这篇文章时,我们可以对Hibernate的性能调优策略做一个宏观的剖析了。当系统访问一个实体时,Hibernate会到数据库中提取相应数据封装成实体供程序使用,但大多数情况下问题并不是这样简单。对象模型由很多实体和值对象组成,它们之间相互依赖,构成一张复杂的“对象图”。从一个指定的对象开始,我们可以导航到与这个对象有直接或间接关系的任何对象上。再回到我们一开始的问题:你怎样从数据库中重建这个对
2010-05-09 11:16:00 5456
原创 Join和Fetch
join和join fetch是两回事,不要搞混! join取自SQL的join概念。被join的对象一般会出现在select,where等其他子句中。因为join的目的在于要对被join的对象做处理,比如过滤等等。 fetch则是抓取策略!它的作用就是指明root entity的哪些关联对象会在load这个entity时一同被load出来!因此,fetch的对象一般是没有
2010-05-09 10:08:00 12122
原创 HQL&Criteria
Obviously, criteria queries are more difficult to read if they get more complex—a good reason to prefer them for dynamic and programmatic query generation, but to use externalized HQL and JPA QL for p
2010-05-06 22:46:00 4635
原创 Hibernate的抓取策略
1.制定合理的抓取策略对系统性能的提升有很大的作用。Hibernate推荐的原则是:通常情况下,我们并不使用映射文档进行抓取策略的定制。更多的是,保持其默认值,然后在特定的事务中, 使用 HQL 的左连接抓取(left join fetch) 对其进行重载。 hibernate推荐的做法也是最佳实践:把所有对象关联的抓取都设为lazy!然后在特定事务中重载! 这种考虑是基于:对象图
2010-05-05 18:07:00 10570 2
原创 关于Hibernate中fatch=eager的bag集合(一个java List)使用Criteria查询出现重复记录的问题
关于这个问题在JPwH一书的13.2.3一节中做了详细的描述!例子:ForumGroup和Forum public class ForumGroup { @OneToMany(fetch=FetchType.EAGER,mappedBy="group") private List forums = new ArrayList();}public class Forum {
2010-05-05 15:03:00 9115 3
原创 关于集合的性能问题
1.Bag 是所有非反向集合类型中性能最差的(但却是反向集合中性能最好的,还有list。)。因为 bag 允许重复的元素值,也没有索引字段,因此不可能定义主键。Hibernate 无法判断出重复的行。当这种集合被更改时,Hibernate 将会先完整地移除 (通过一个(in a single DELETE))整个集合,然后再重新创建整个集合。因此 Bag 在非反向集合中是非常低效的。这一点我已
2010-05-03 22:51:00 5019
原创 关于save和persist
persist() is well defined. It makes a transient instance persistent. However, it doesnt guarantee that the identifier value will be assigned to the persistent instance immediately, the assignment mig
2010-05-03 21:56:00 5522
原创 级联与Session操作
Hibernate的每一种级联设置都对应一个Session的方法。当调用这个方法去处理一个实体时,如果实体有关联对象配制了这种方法对应级联,那么关联对象将被一样地处理!总共提供以下几种级联设置:package org.hibernate.annotations;/** * Cascade types (can override default EJB3 cascades */pub
2010-05-03 17:09:00 5248
原创 关于值对象与实体的再讨论
在领域模型中,实体与值对象的概念非常重要,Hibernate也要求明确区分这两者,以至于它们的映射配制上都不一样。以一对多为例,同是一个set,如果是实体会使用,@OneToMany,如果是值对象,会使用,@CollectionOfElements.实体与值对象的一个重要区别在于:实体有自己的生命周期,而值对象没有,它总是依附于一个实体,如果这个实体不存在了,那么它也将一同消亡。这一点在hib
2010-05-03 10:59:00 7379
原创 关于为什么单向一对多(one-to-many)要使用关联表的再思考
在传统的数据建模中,允许为 Null 值的外键被认为是一种不好的实践,。这并不是 Hibernate的要求.---Hibernate文档2013年1月29日:补充:简单地说,数据库的外键关联所描述的最严格与最精准的事物关系应该是像“子-父”这样的单向多对一关系,也即,“子”必有“父”!而反方向的一对多的关系并不是其所能准确描述,原因就是“父”未必有“子”,所以从这个角度上说,使用关联表描述单向一对
2010-05-02 16:40:00 8081 2
Big_Data_SMACK.pdf
2016-10-14
The.Art.of.Multiprocessor.Programming.Revised.Reprint
2014-02-06
win7下硬盘安装Linux(Fedora17,CentOS 6.4,Ubuntu 12.10,LinuxMint 13 64-bit)
2013-08-16
Packtpub.Hadoop.MapReduce.Cookbook.Jan.2013
2013-03-04
OpenSSH for Windows
2013-02-06
Professional Website Performance.pdf
2013-02-04
Red.Gate.SQL.Toolbelt.v1.8.2.238.Incl.Keygen
2013-01-14
Araxis.Merge.Professional.v2012.4260.x64-BEAN
2012-12-27
Apress.Pro.SQL.Server.2012.Practices.Nov.2012
2012-12-24
Professional JavaScript for Web Developers, 3rd Edition 附书中代码
2012-09-19
Head.First.HTML.and.CSS.2nd.Edition.Aug.2012
2012-09-11
Packtpub.Spring.Security.3.May.2010
2012-09-10
Pro Apache Log4j Second Edition
2012-09-06
PowerDesigner16.1 crack keygen 破解文件
2012-06-21
SecureCRT.v6.7.3.292(含注册码和破解补丁),
2012-06-13
SecureCRT.v6.7.3.292.x64(含注册码和破解补丁)
2012-06-13
Apache Solr 3.1 Cookbook
2012-04-24
Lucene in Action 2nd Edition
2012-04-24
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人