zoukankan      html  css  js  c++  java
  • Hibernate_一对多映射_2

    单向多对一关联:在many方的实体中添加保存one方的引用,

            在many方的配置文件中添加<many-to-one>配置

    ·多对一的关系和关系数据库中的外键参照关系最匹配,即在己方的表中的一个外键参照另一个表的主键

    ·通过在多方持有一方的引用实现,需要在“多”端的一端使用<many to one> 配置

     <class name="com.imooc.entity.Student" table="student">
      <id name="sid" column="sid" type="java.lang.Integer">
       <generator class="increment"></generator>
      </id>
      <property name="sname" type="java.lang.String">
       <column name="sname" length="20" not-null="true"></column>
      </property>
      <property name="sex">
       <column name="sex"></column>
      </property>  

      <!-- 配置多对一关联关系 -->
      <many-to-one name="grade" class="com.imooc.entity.Grade" column="gid" cascade="all"></many-to-one>
     </class>

    //保存
     public static void save(){
      Grade g=new Grade("Java一班","Java软件开发一班");
      Student stu1=new Student("慕女神", "女");
      Student stu2=new Student("小慕慕", "男");
      
      //设置关联关系
      stu1.setGrade(g);
      stu2.setGrade(g);
      
      Session session=HibernateUtil.getSession();
      Transaction tx=session.beginTransaction();
      session.save(g);
      session.save(stu1);
      session.save(stu2);
      tx.commit();
      HibernateUtil.closeSession(session);
     }

    ===双向多对一测试=========================

    配置了双向关系以后,既可以从多方查找one 方信息,也可从one方查找多方信息,非常方便

    多方:

    <hibernate-mapping>
     <class name="com.imooc.entity.Student" table="student">
      <id name="sid" column="sid" type="java.lang.Integer">
       <generator class="increment"></generator>
      </id>
      <property name="sname" type="java.lang.String">
       <column name="sname" length="20" not-null="true"></column>
      </property>
      <property name="sex">
       <column name="sex"></column>
      </property>

    <!-- 配置多对一关联关系 -->
      <many-to-one name="grade" class="com.imooc.entity.Grade" column="gid"></many-to-one>
     </class>

    ONE方:

    <hibernate-mapping>
     <class name="com.imooc.entity.Grade" table="grade">
      <id name="gid" column="gid" type="java.lang.Integer">
       <generator class="increment"></generator>
      </id>
      <property name="gname" type="java.lang.String">
       <column name="gname" length="20" not-null="true"></column>
      </property>
      <property name="gdesc">
       <column name="gdesc"></column>
      </property>
      <!-- 配置一对多关联关系 -->
      <set name="students" table="student">
       <key column="gid"></key>
       <one-to-many class="com.imooc.entity.Student"/>
      </set>
     </class>

    //保存
     public static void save(){
      Grade g=new Grade("Java一班","Java软件开发一班");
      Student stu1=new Student("慕女神", "女");
      Student stu2=new Student("小慕慕", "男");
      
      //设置关联关系
      g.getStudents().add(stu1);
      g.getStudents().add(stu2);
      stu1.setGrade(g);
      stu2.setGrade(g);
      
      Session session=HibernateUtil.getSession();
      Transaction tx=session.beginTransaction();
      session.save(g);
      session.save(stu1);
      session.save(stu2);
      tx.commit();
      HibernateUtil.closeSession(session);
     }

    ===inverse属性=====================================

    inverse美 [ˌɪnˈvɜ:rs]  adj. 相反的;逆向的   n. 相反;倒转;vt. 使倒转;使颠倒

    <set>节点的inverse属性指定关联关系的控制方向,默认由one方来维护

    关联关系中,inverse="false",则为主动方,由主动方负责维护关联关系

    在一对多关联中,只能设置One方的inverse="true",由多方负责维护关联关系,有助于性能改善(避免双方重复维护)

    多方:  

    <!-- 配置一对多关联关系 设置inverse属性为true,由多方负责维护关联关系-->
      <set name="students" table="student" inverse="true">
       <key column="gid"></key>
       <one-to-many class="com.imooc.entity.Student"/>
      </set>

    ===cascade属性:设置级联关系=====================================

    cascade美 [kæˈsked]  n.串联;倾泻;小瀑布,瀑布状物    vi.    流注;大量落下

    ·当设置了cascade属性不为none时,Hibernate会自动持久化所关联的对象

    cascade属性的设置会带来性能上的变动,需谨慎设置

    属性值  :  含义和作用

    all        对所有操作进行级联操作

    save-update     执行保存和更新操作时进行级联操作

    delete       执行删除操作时操作时进行级联操作

    none      对所有操作不进行级联操作

    //保存
     public static void save(){
      Grade g=new Grade("Java一班","Java软件开发一班");
      Student stu1=new Student("慕女神", "女");
      Student stu2=new Student("小慕慕", "男");

    //设置关联关系
      g.getStudents().add(stu1);
      g.getStudents().add(stu2);
      stu1.setGrade(g);
      stu2.setGrade(g);
      
      Session session=HibernateUtil.getSession();
      Transaction tx=session.beginTransaction();
      session.save(g);//级联操作
      //session.save(stu1);
      //session.save(stu2);

    <!-- 配置一对多关联关系 设置inverse属性为true,由多方负责维护关联关系-->
      <set name="students" table="student" inverse="true" cascade="save-update">
       <key column="gid"></key>
       <one-to-many class="com.imooc.entity.Student"/>
      </set>

    例子:也可在学生端级联

      //session.save(g);//级联操作
      session.save(stu1);
      session.save(stu2);

    多many方:

    <!-- 配置多对一关联关系 -->
      <many-to-one name="grade" class="com.imooc.entity.Grade" column="gid" cascade= "all"></many-to-one>
     </class>

    =========================

    MyEclipse 给工程添加hibernate支持

    菜单Windws-->Show-->View-->Other,展开MyEclipse Datebase 选择DB Browser(数据库视图)

    左侧空白右击,New-->DatebaseDriver 选择相应数据库 给连接命名,指定DB URl-->user /password-->

    Driver JARs :点击Add JARS 选择JAR包

    可点击Test Driver

    可勾选save password

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

    MyEclipse 添加hibernate支持

    工程-右击-MyEclipse->Add Hibernate Capabilities:

    选择Hibernate版本(MyEclipse版本越高,支持的Hibernate版本也越高,尽量选择新版本)

    根据需要选择相应的JAR包::(1)添加JAR包

    next-->创建hibernate.cfg.xml(指定目录)  :(2)添加核心配置文件

    next-->选择数据库连接

    next-->创建Hibernate工具类,用于获取session或者sessionFactory(Java package 新建)    :(3)添加工具类

    finish

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

    MyEclipse 反向工程:根据数据库中的表 自动创建持久化类和映射文件文件

    1)创建包entity 用于保存持久化类

    2)数据库视图 CTRL 选择复数表-右击-Hibernate Reverse Engineering(反向工程)

      指定Java src folder目录

      指定持久化类和映射文件保存位置,

      勾选Create POJO<>DB Table mapping information创建映射文件

        (勾选create a Hibernate mapping file (*.hbm.xml)for each datebase table)

          (勾选Update Hibernate configuration with mapping resource location)

      勾选Java Date Object (POJO<> DB Table) :创建实体类

          注意:Create abstract class 不勾选(不需要)

      NEXT ->Hibernate Mapping and Application Generation :

          Id Generator:选择主键生成策略(例子中是increment)

      NEXT->选择表 勾选:Include referenced tables(A->B),Include referenced tables(A<-B)

      finish.切换回企业开发视图

  • 相关阅读:
    173. Binary Search Tree Iterator
    199. Binary Tree Right Side View
    230. Kth Smallest Element in a BST
    236. Lowest Common Ancestor of a Binary Tree
    337. House Robber III
    449. Serialize and Deserialize BST
    508. Most Frequent Subtree Sum
    513. Find Bottom Left Tree Value
    129. Sum Root to Leaf Numbers
    652. Find Duplicate Subtrees
  • 原文地址:https://www.cnblogs.com/charles999/p/6606032.html
Copyright © 2011-2022 走看看