hibernate要点

转载 2006年06月08日 19:39:00

Hibernate

 

1.两种配置文件: 
  A.hibernate.cfg.xml  
   B.hibernate.properties 
  A
中可含映射文件的配置,而Bhard codes加映射文件。
  A
Configuration config=new Configuration().config(); 
  B. Configuration config=new Configuration(); 
     config.addClass(TUser.class); 

 

2.不必一定用hibernate.cfg.xmlhibernate.properties这两文件名, 
  
你也不一定非得把配置文件放在Classes下, 
   File file=new File("c://sample//myhibernate.xml"); 
   Configuration config=new Configuration().config(file); 
3. session.Flush() 
  
强制数据库立即同步,当用事务时,不必用flush,事务提交自动调用flush 
  
session关闭时也会调用flush 

4. Hibernate总是使用对象类型作为字段类型 
5. XDoclet
专门建立了hibernate doclet,就是在java代码上加上一些 
   java docTag
,后来再让XDoclet分析该java代码,生成映射文件
6.HQL
子句本身大小写无关,但是其中出现的类名和属性名必须注意大小写区分。
7.
关系: 
  Constrained :
约束,表明主控表的主键上是否存在一个外键(foreigh key对其进行约束。 
  property-ref:
关联类中用于与主控类相关联的属性名,默认为关联类的主键属性名单向一对多需在一方配置,双向一对多需在双方进行配置
8.lazy=false:
被动方的记录由hibernate负责记取,之后存放在主控方指定的Collection类型属性中 
9. java.util.Set
net.sof.hibernate.collecton.Bag类型的Collection

10.重要:inverse:用于标识双向关联中的被动方一端。 
              inverse=false
的一方(主控方)负责维护关联关系.默认值:false 
11.batch-size:
采用延迟加载特征时,一次读入的数据数昨。
12.
一对多通过主控方更新(主控方为一方时)
        user.getAddresses().add(addr); 
        session.save(user);//
通过主控对象级联更新   
13.
one-to-many 关系中,将many 一方设为主动方(inverse=false)将有助性能 的改善。在一方设置关系时,inverse=true,即将主控权交给多方,这样多方可主动从一方获得foreign key,然后一次insert即可完工。   

        addr.setUser(user);//设置关联的TUser对象 
        user.getAddresses().add(addr); 
        session.save(user);//
级联更新  
14.
只有设为主控方的一方才关心(访问)对方的属性,被动方是不关心对方的属性的。
15.one-to-many
many-to-one节点的配置属性不同: 
        
一对多关系多了lazyinverse两个属性 
        
多对多节点属性:column:中间映射表中,关联目标表的关联字段 
                   class:
类名,关联目标类 
                   outer-join:
是否使用外联接     
                  
注意:access是设置属性值的读取方式。

 

                    column是设置关联字段。 

 

16.多对多,注意两方都要设置inverselazy,cascade只能设为insert-update  
    
多对多关系中,由于关联关系是两张表相互引用,因此在保存关系状态时必须对双方同时保存。 
                  group1.getRoles().add(role1); 
                  role1.getGroups().add(group1); 
                  session.save(role1); 
                  session.save(group1);  

                 多对多关系也是将他们分离成两个一对多关系,中间连接一个连接表。所以通用存在一对多的关系,也可以这样说:一对多是多对多的基本组 成部分。
17.
关于vopo 
      vo
经过hibernate容量处理,就变成了po(vo的引用将被容器保存,并且在session关闭时flush,因此po如果再传到其它地方改变了,就危险了
  
      vo
po相互转换:BeanUtils.copyProperties(anotherUser,user); 
18.
对于save操作而言,如果对象已经与Session相关联(即已经被加入Session的实体容器中),则无需进行具体的操作。因为之后的Session.flush过程中,Hibernate会对此实体容器中的对象进行遍历,查找出发生变化的实体,生成并执行相应的update语句。 
19.
如果我们采用了延迟加载机制,但希望在一些情况下,实现非延迟加载时的功能,也就是说,我们希望Session关闭后,依然允许操作useraddresses属性,ibernate.initialize方法可以通过强制加载关联对象实现这一功能:  这也正是我们为什么在编写POJO时,必须用JDK Collection接口(如Set,Map而非特定的JDK Collection实现类(如HashSetHashMap)申明Collection属性的原因。 
20.
事务:从sessionFactory获得session,其自动提交属性就已经关闭(AutoCommit=false),此时若执行了jdbc操作,如果不显式调用 session.BeginTransaction(),是不会执行事务操作的。
       jdbc transaction:
基于同一个session(就是同一个connection)的事务
      jta  transaction:
session(跨connection)事务
     
对于jta事务,有三种实现方法: 
           A
UserTransaction tx=new InitialContext().lookup("..."); 
                tx.commit(); 
           B.
使用hibernate封装的方法:(不推荐
               Transaction tx=session.beginTransaction(); 
                tx.commit(); 
           C.
使用ejbsessionBean的事务技持方法,你只要在把需要在发布描述符中,把需要jta事务的方法声明为require即可 
21.
悲观锁,乐观锁: 
          
乐观锁一般通过version来实现,注意version节点必须出现在id后。 

 

22.Hibernate中,可以通过Criteria.setFirstResultCriteria.setFetchSize方法设定分页范围。 
           Query
接口中也提供了与其一致的方法,hibernate主要在dialect类中实现在这个功能。 

 

23.cache 
    <hibernate-configuration> 
 <session-factory> 
 …… 
  <property name="hibernate.cache.provider_class"> 
   net.sf.ehcache.hibernate.Provider 
  </property>  
 
还需对ecache本身进配置 
  <ehcache> 
 <diskStore path="java.io.tmpdir"/> 
 <defaultCache 
 maxElementsInMemory="10000" //Cache
中最大允许保存的数据数量 
 eternal="false" //Cache
中数据是否为常量 
 timeToIdleSeconds="120" //
缓存数据钝化时间 
 timeToLiveSeconds="120" //
缓存数据的生存时间 
 overflowToDisk="true" //
内存不足时,是否启用磁盘缓存 
 /> 
  </ehcache> 
 
之后在映射文件中指定各个映射实体的cache策略 
  <class name=" org.hibernate.sample.TUser" .... > 
 <cache usage="read-write"/> 
 .... 
 <set name="addresses" .... > 
  <cache usage="read-only"/> 
 .... 
 </set> 
 </class> 
Query.list()
Query.iterate()的不同: 
 
对于query.list()总是通过一条sql语句获取所有记录,然后将其读出,填入pojo返回
 
但是query.iterate(),则是首先通过一条Select SQL <SPAN style="FONT-SIZE: 9pt; COLOR: black; LINE-HEIGHT: 150%; mso-bidi-font-family: ; mso-ascii-font-family: Verdana; mso-hansi-fo

Hibernate知识要点复习-基本环境搭建(1)

决定系统的整理下HIbernate的各方面知识。先重新搭建一次纯Hibernate的架子。       1.hibernate基本配置文件hibernate.cfg.xml,用于配置SessionFa...

hibernate配置要点详谈

  • 2010年10月30日 12:11
  • 147KB
  • 下载

Hibernate annotation多对多相关要点总结

最近做一个项目,框架的持久层用的是Hibernate annotation,用户和他收藏的网站的关系是多对多的关系,一个用户可以收藏多个他喜爱的网站;反过来,一个网站也可以被多个用户收藏。 因此在设计...
  • hbxfyxw
  • hbxfyxw
  • 2014年03月04日 18:03
  • 837

Hibernate要点总结

1、什么是Hibernate     1)Hibernate是数据访问层的框架,对JDBC进行了封装,是针对数据访问层的面向对象的解决方案。     2)Hibernate允许我们直接访问对象,然后将...

大师总结Hibernate性能优化要点(转载)

Hibernate性能优化要点: 1.尽量使用many-to-one,避免使用单项one-to-many 2.灵活使用单向one-to-many 3.不用一对一,使用多对一代替一对一 4.配置...
  • kvgnt
  • kvgnt
  • 2011年10月09日 23:08
  • 472

Hibernate学习(一)--Hibernate知识要点1

Hibernate知识要点 新建项目2 学习建立user-library-hibernate,并加入相应的jar包  a项目右键-build path-configure build path-add...

Hibernate学习(一)--Hibernate知识要点4

多对多双向关联 关系举例:老师ßà学生,老师需要知道自己教了哪些学生,学生也知道自己有哪些老师. 数据库:中间表 Annotation:@ManyToMany XML: 多对多单向配置只需要...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:hibernate要点
举报原因:
原因补充:

(最多只允许输入30个字)