hibernate类之间关系

一对多

    每个实体类配置文件中

在一的类配置文件里增加:

在hibernate  配置文件中指定映射文件

多对一

 

在多的类的配置文件中添加

<!-- 配置多对一关联关系 -->

     <many-to-one name="grade" class="com.imooc.entity.Grade" column="gid"  ></many-to-one>

其中

name="grade" 为多方引用

class="com.imooc.entity.Grade" 为乙方的实体类

column="gid" 为一方外键列名

cascade="all” 为 级联方式

测试

级联(cascade)属性
1、CascadeType.ALL(包括增、删、改、查,联动操作),其实查不算在内,查Fetch

2、CascadeType.MERGE(合并的join)--不重要

3、CascadeType.PERSIST(保存的时候在级联)

4、CascadeType.REFRESH(刷新说明:比如现在我查询出了数据,另外一个人在我查询数据之后,他对数据做了修改,这是才会级联上,hibernate会自动刷新我查询出来的数据)

5、CascadeType.REMOVE (只要在删除操作时才会级联)

6、我们一般都只设置CascadeType.ALL就OK了,

7、Cascade不是必须的,他的作用只是可以让我们快速的开发,我们也可以通过手动增、删、改、查

Fetch捉取策略
1、FetchType.EAGER(渴望的,希望马上得到)

a) 一对多关系,比如通过get()方法来get出一的一端,他之后会出一条SQL语句,不会自动去查询多的一端,如果设置FetchType.EAGER,会讲他的关联对象查询出来

b) 如果是load的话,他不会发出SQL语句,因为load支持延迟加载,只有真正获取数据时才会发SQL

2、FetchType.LAZY(懒加载)

a) 只有真正获取数据时才发出SQL语句

3、默认是:FetchType.LAZY(一对多)

4、默认是:FetchType.EAGER(多对一)

5、一般使用默认就可以了

多对一双向关联

同时在多的一方配置

<!-- 配置一对多关联关系 -->

    <set name="students" table="student">

      <key column="gid"></key>

      <one-to-many class="com.imooc.entity.Student"/>

    </set>

多的一方

<!-- 配置多对一关联关系 -->

    <many-to-one name="grade" class="com.imooc.entity.Grade" column="gid" cascade="all"></many-to-one>

一的一方

<!-- 配置一对多关联关系 -->

    <set name="students" table="student">

      <key column="gid"></key>

      <one-to-many class="com.imooc.entity.Student"/>

    </set>

多对多

   在每个类中添加对方的集合

   在每个类的配置自文件配置多对多关系

<!-- 配置多对多关联关系 -->

    <set name="projects" table="proemp" inverse="true">

      <key column="rempid"></key>

//关联的外键

      <many-to-many class="com.imooc.entity.Project" column="rproid"></many-to-many>

    </set>

------------------------------------------------------------------------------

<!-- 配置多对多关联关系 -->

    <set name="employees" table="proemp" cascade="all">

      <key column="rproid"></key>

      <many-to-many class="com.imooc.entity.Employee" column="rempid"></many-to-many>

    </set>

table="proemp" 为中间表名不归属其他任何一个类

test

Project project1=new Project(1001,"椤圭洰涓");

    Project project2=new Project(1002,"椤圭洰浜");

    Employee employee1=new Employee(1,"鎱曞コ绁");

    Employee employee2=new Employee(2,"imooc");

    project1.getEmployees().add(employee1);

    project1.getEmployees().add(employee2);

      project2.getEmployees().add(employee1);

   

    Session session=HibernateUtil.getSession();

    Transaction tx=session.beginTransaction();

    session.save(project1);

    session.save(project2);

    tx.commit();

    HibernateUtil.closeSession(session);

  }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值