WEB开发网
开发学院WEB开发Jsp 升级到Hibernate3.0的理由 阅读

升级到Hibernate3.0的理由

 2008-01-05 18:30:57 来源:WEB开发网   
核心提示: 团队升级一次不轻易,总要找到足够的理由或者借口:查询语法的全面增强;真正彻底的OR映射;性能的提升是三个的主要理由,升级到Hibernate3.0的理由,另外,买一送一的,结果找一个对象经常藤连瓜瓜连藤找出10来个对象出来,很恐怖,还有四个暂时不是理由的理由,查询语法全面增强HQL,Native SQL ,Crite

团队升级一次不轻易,总要找到足够的理由或者借口:查询语法的全面增强;真正彻底的OR映射;性能的提升是三个的主要理由。另外,买一送一的,还有四个暂时不是理由的理由。

查询语法全面增强
  
HQL,Native SQL ,Criteria都有大幅增强,不再有太多无法完成需要sql辅助的地方
   1.HQL语法增强 
    使用Antlr的作为语法引擎
    支持subquery,distinct, nullif,case ,cast,having count(*)在内的绝大部分SQL语法
    支持Bulk-Update,Bulk-Delete 语法
    "update Customer set name = :newName where name = :oldName";
   
   2.Native SQL增强
    
2.0时的Native基本上是流血上市,中看不中用的。3.0时才基本可用。

   3. 非完整对象的查询结果返回Map 而不是Array.
    2.0时按array[0],array[1]访问查询结果根本是无人敢用的语法,Map的好处是可以按名称取值

   " select new map(goods.goodsNo as goodsNo,goods.code as code) from Goods goods"
    Map goods =(Map)list.get(0);
    Strng code = (String)goods.get("code");

真正的OR映射
    完美支持三种O/R典型映射及其混合
    discrim(整个继续树在同一个表,通过discrim列区分不同的子类)
     unionclass(每个子类一个表,每个表拥有全部属性)  
    joinClass(每个父类每个子类各有一个表,父类的属性在父表,子类的表只包含子类的属性)
  
   4.discrim支持formula虚拟列做标识符 
    不再需要一个单独的discriminator列,可以通过对其他列的计算得出子类的标识符
   <discriminator type="int"
  formula="CASE WHEN company is null THEN 0 WHEN company = 'JBoss' THEN 1 ELSE 2 END"/>

   5.union class支持

   <class name="Being" abstract="true">
     <id name="id" unsaved-value="0" column="bid">
       <generator class="increment"/>
     </id>
    <PRoperty name="identity" column="ident"/>
    <union-subclass name="Human" table="aliens">
    <property name="sex" column="sex"/>
    </union-subclass>
   </class> 

   要害性能升级
 
  6.column-level lazy fecth
  2.0的时候只能对one to many的列 lazy fecth,结果找一个对象经常藤连瓜瓜连藤找出10来个对象出来,很恐怖。3.0终于没有这个恶梦了。


Tags:升级 Hibernate 理由

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接