Laurence的技术博客

// 风尘仆仆,终有归途

四种并发异常,四种相应的隔离级别--数据库事务的复习

印象中这是在博客里第三次重提数据库事务的隔离级别了。这一块内容有一点绕,当时弄明白了,过一段时间又会忘记。我觉得掌握数据库事务隔离级别的窍门在于:罗列出事务在并发时会发生哪些异常情况,什么样的隔离级别会杜绝这种异常情况的发生。下面就按照这个思路把数据库事务隔离级别再复习一遍。      第一种可能...

2010-05-26 17:27:00

阅读数 9002

评论数 1

关于Boolean类型在flex与java中间传递的问题

  最近在开发过程中发现一个问题:Boolean类型的值无法在flex和java间传递,经过一段研究发现,问题出现在Boolean类型的getter和setter方法上。      按照javabean的规范,小布尔类型的getter是以is做前缀的,但是大布尔类型的getter就成了以get为前...

2010-05-26 11:18:00

阅读数 5705

评论数 0

Join取代不了Fetch,Fetch的独到之处在于打通了对象间的关联关系

确认一个问题:1.通过Join获得的集合,即使是集合的全体,在通过它的宿主对象访问这个集合时,还是会重新生成SQL来加载这个集合?验证结果:的确如此。看来Hibernate还没有如此智能。这个问题也从侧面解释了join和fetch的不同:join可以有过滤条件,不一定会将关联对象全部取出。但是fe...

2010-05-16 11:51:00

阅读数 4238

评论数 0

如何抓取平行集合

join抓取两个以上的平行集合会产生笛卡尔积,而如果使用subselect抓取又会失去动态抓取集合其他依赖对象的机会。要怎样才能动态地抓取平行集合呢?目前我能想到的一种方法就是生成多条select,分别抓取平行集合。我觉得这并不是一个很完美的方案,但是它却实是可行的。以Forum为例,在某个use...

2010-05-12 10:39:00

阅读数 4420

评论数 0

关于idbag

前一篇文章提到了不能抓取两个以上的平行bag,而idbag是不存在这个问题的。原因就在于idbag会为其每个元素生成一个id,这样就可以区分不同元素了。bad因为无法区分元素带来了两个大问题:1.bag集合的更新效率非常低。因为对于一个修改过的bag集合,hibernate无法准确得知修改的元素对...

2010-05-11 18:16:00

阅读数 4672

评论数 0

为什么Hibernate不允许同时抓取两个和两个以上的平行bag集合

在hibernate中, 如果试图同时抓取两个或两个以上平行的bag集合,会抛出这个异常:org.hibernate.HibernateException: cannot simultaneously fetch multiple bags。对于这种情况,Hibernate文档给出的解释是:The...

2010-05-11 16:10:00

阅读数 4842

评论数 0

JPA和Hibernate抓取策略的差异

Hibernate和JPA的抓取策略是有差异的。这一点在使用JPA注解时会有所体现。有时候我们需要添加一些hibernate独有的注解才能实现比较好的抓取。下面简单提几点。      所谓“抓取策略”,总要涉及两个问:何时抓取以及如果抓取。这两点在Hibernate提供的注解上体现的非常明显。Hi...

2010-05-10 18:07:00

阅读数 7259

评论数 0

Hibernate的四种抓取策略

subselect fetching是hibernate特有的抓取策略。它在抓取时机上有些介于lazy和eager之间(只是这样说,它实际上是配合lazy的一种抓取策略)。 一方面,它是在集合第一次被访问时才进行抓取,这有一些lazy的意味。但同时它的确预先抓取了一些“额外”的数据出来,而这些数据...

2010-05-10 11:00:00

阅读数 4540

评论数 0

在Hibernate环境下对大型集合的处理

在Hibernate环境下,对大型集合的访问管理是一个非常值得重视的问题。一次将大型集合加载到内存是不能容忍的。因此在操作这种集合时要特别小心。下面给出一些建议。1.使用@org.hibernate.annotations.LazyCollection(org.hibernate.annotati...

2010-05-10 10:51:00

阅读数 4529

评论数 0

两种极端情况的案例:N+1次查询和笛卡尔积

前一篇文章两种极端:频繁的查询和巨大的结果集讲到了Hibernate加载数据时可能会出现的两种极端情况:频繁的查询和一次查出巨大的结果集。其中:N+1次查询是前一种情况的一个典型案例,笛卡尔积则是后一种情况的典型案例。下面分别简单地再总结一下这两种极端案例出现的原因以及调优方法。 一.N+1次查询...

2010-05-09 14:57:00

阅读数 5540

评论数 0

两种极端:频繁的查询和巨大的结果集

写到这篇文章时,我们可以对Hibernate的性能调优策略做一个宏观的剖析了。当系统访问一个实体时,Hibernate会到数据库中提取相应数据封装成实体供程序使用,但大多数情况下问题并不是这样简单。对象模型由很多实体和值对象组成,它们之间相互依赖,构成一张复杂的“对象图”。从一个指定的对象开始,我...

2010-05-09 11:16:00

阅读数 4905

评论数 0

Join和Fetch

      join和join fetch是两回事,不要搞混! join取自SQL的join概念。被join的对象一般会出现在select,where等其他子句中。因为join的目的在于要对被join的对象做处理,比如过滤等等。     fetch则是抓取策略!它的作用就是指明root entit...

2010-05-09 10:08:00

阅读数 10612

评论数 0

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 gener...

2010-05-06 22:46:00

阅读数 4369

评论数 0

Hibernate的抓取策略

1.制定合理的抓取策略对系统性能的提升有很大的作用。Hibernate推荐的原则是:通常情况下,我们并不使用映射文档进行抓取策略的定制。更多的是,保持其默认值,然后在特定的事务中, 使用 HQL 的左连接抓取(left join fetch) 对其进行重载。 hibernate推荐的做法也是最佳实...

2010-05-05 18:07:00

阅读数 10209

评论数 2

关于Hibernate中fatch=eager的bag集合(一个java List)使用Criteria查询出现重复记录的问题

关于这个问题在JPwH一书的13.2.3一节中做了详细的描述!例子:ForumGroup和Forum public class ForumGroup { @OneToMany(fetch=FetchType.EAGER,mappedBy="group") private Lis...

2010-05-05 15:03:00

阅读数 8596

评论数 3

关于集合的性能问题

1.Bag 是所有非反向集合类型中性能最差的(但却是反向集合中性能最好的,还有list。)。因为 bag 允许重复的元素值,也没有索引字段,因此不可能定义主键。Hibernate 无法判断出重复的行。当这种集合被更改时,Hibernate 将会先完整地移除 (通过一个(in a single DE...

2010-05-03 22:51:00

阅读数 4560

评论数 0

关于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 p...

2010-05-03 21:56:00

阅读数 5253

评论数 0

级联与Session操作

Hibernate的每一种级联设置都对应一个Session的方法。当调用这个方法去处理一个实体时,如果实体有关联对象配制了这种方法对应级联,那么关联对象将被一样地处理!总共提供以下几种级联设置:package org.hibernate.annotations;/** * Cascade type...

2010-05-03 17:09:00

阅读数 4962

评论数 0

关于值对象与实体的再讨论

在领域模型中,实体与值对象的概念非常重要,Hibernate也要求明确区分这两者,以至于它们的映射配制上都不一样。以一对多为例,同是一个set,如果是实体会使用,@OneToMany,如果是值对象,会使用,@CollectionOfElements.实体与值对象的一个重要区别在于:实体有自己的生命...

2010-05-03 10:59:00

阅读数 6546

评论数 0

关于为什么单向一对多(one-to-many)要使用关联表的再思考

在传统的数据建模中,允许为 Null 值的外键被认为是一种不好的实践,。这并不是 Hibernate的要求.---Hibernate文档2013年1月29日:补充:简单地说,数据库的外键关联所描述的最严格与最精准的事物关系应该是像“子-父”这样的单向多对一关系,也即,“子”必有“父”!而反方向的一...

2010-05-02 16:40:00

阅读数 7055

评论数 2

提示
确定要删除当前文章?
取消 删除