SSH中Hibernate对象状态,一级缓存,关联关系映射(学习笔记)

Hibernate对象状态

Hibernate三种状态:
1: 瞬时态 : 没有id即没保存,也脱离了sesion 
2: 持久态 : 已经保存到数据库(有着完整的属性)
3:托管态 :  一个完整的对象,但是脱离了sesion 

例:

public void test(){           //三种状态相对于book实例而言
        Session session=HibernateUtils.getSession();
		Transaction t=session.beginTransaction();
		Book book =new Book();              //瞬时态 
		book.setName("thinkings");
		book.setPrice(99d);            
		session.save(book);                 //持久态                  
		t.commit();
        session.close();                          
        System.out.println(book);           //脱离

}

 

    一级缓存与Hibernate快照

     一级缓存:  是指Session缓存
Hibernate快照: Session缓存于快照做对比,看什么时候更新
一级缓存特点:get list获取对象一级缓存中存在直接用,无需sql语句,没有则去MySQL查询,同时放在缓存
           :save update操作数据对象时,flush(),保存在MySQL,同时会在Sesion存在复制一份
           :close()关闭,会清空Session缓存
           :按照缓存的状态更新数据库即 Flush()刷出缓存
           
一级缓存作用:减少对数据库的访问次数
什么时候刷出缓存 FLush(): 1:  Transaction.commit()
                        2:   持久化属性变化,会先刷出缓存保障持久化的最新状态
                        3:   主动调用 flush()方法,即update 
Hibernate快照特点:session.flush()缓存刷出依赖于快照
                : save()时复制一份给Session同时也会给快照一份
             

注意:update()只给复制一份给Sesion,不会给Hibernate快照
      此时如果 持久化属性变化(缓存和快照不同)则会flush()即update

 

Flush 输出缓存 即updat()数据库


Hibernate关联关系映射

一对一  1:1                  一对多 1:n                多对多 m:n

class A{                  class A{                    class A{
  B b;                      Set<B> b;                   Set<B> b;
}                          }                           }

class B{                  class B{                     class B{
  A a;                       A a;                        Set<A> a;   
}                          }                           }

在hibernate.cfg.xml中配置  自动建表或更新表

<property name="hibernate.hbm2ddl.auto">update</property> 
                                        create
                                        //根据不同情况,使用不同属性

1:n 关联关系映射       在n中加外键

Customer表             1:n关系         Order表:
  id                                    id
  name                                  address
  Set<Order>orders                      price
                                        customer      //外键 


映射关系:两个类,都要将互相两边的映射关系都要写出来


Customer.hbm.xml中:
<set name="orders"  >            //  <set>标签可以理解会 被映射类orders
    <key column="cid" />         //   <key column>写书 映射类中的外键名
	<one-to-many class="Order"/> //  写出映射类的名字
</set>  

Order.hbm.xml中:
<many-to-one name="customer" class="Customer”  column="cid"   />               
              //属性Customer        //对应类        //column 对应表中的字段

m:n 多对多关系映射

Student表                      s_c表                        Course表                     
  id                            sid                          id
  sname                         cid                          cname
  Set<Course>courses                                         Set<Stduent>students

Student.hbm.xml中:
<set name="courses" table="s_c" >          // 此类生成的外键 放在那张表 
	<key column="sid" />                   // 此类在对应表的 外间列名称
	<many-to-many class="cn.itcast.manytomany.Course" column="cid" />
</set>                                     //描述对应关系类及其名字

Course.hbm.xml中:
<set name="students" table="s_c" >         // 此类生成的外键 放在那张表 
	<key column="cid" />                   // 此类在对应表的 外间列名称
	<many-to-many class="cn.itcast.manytomany.Student" column="sid"/>
</set>                                      //描述对应关系类及其名字

 反转

Student表                      s_c表                        Course表                     
  id                            sid                          id
  sname                         cid                          cname
  Set<Course>courses                                         Set<Stduent>students


将Course.hbm.xml 中
<set inverse="true" > 表示反转关系,放弃对另一端的维护
                      默认false 表示需要维持关系


1:n: 将 1 设置 inverse=true ,表示有多的一方维护关系
     都不设置反转,两边可以同时维护关系,也不会出错,但会多余sql语句
     有一方维持则可以

m:n: 任意一方都可以
      都不设置反转,两边不能同时维护关系,会出错误,由一方维护则可以

级联

cascade: 表示主控方 save update delete 其关联对象也会执行相同操作

save-update:表示save update saveOrUpdate
delete     :表示detele 对应方也会删除
           :不过没有delete级联 则对应方外键会成null
delete-orphan : 都对象的外键解除关系,则会成null,则会删除
all        : 所有关联操作,不包括 孤儿删除
none       : 默认,不进行任何操作

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值