• Hibernate 关联映射


    实体之间的关系
      关联,聚合,依赖,组合,继承

    关系的类型:
      一对多
      多对一
      一对一
      多对多


      学生表和年级表:

     1 --学生表
     2 create table student(
     3        stuno number(4) primary key,
     4        name varchar2(20) not null,
     5        gradeid number(4)
     6 
     7 )
     8 --年级表
     9 create table grade(
    10        gradeid number(4) primary key,
    11        gradename varchar2(20) not null
    12 
    13 )

    当一对多和多对一关系组合就是双向关联了

      所以整合在一起写了个添加数据和删除外键表的 级联代码

      1.建立对象

        student:    

     1 package entity;
     2 
     3 import java.io.Serializable;
     4 /**
     5  * 学生实体类
     6  * @author Administrator
     7  *
     8  */
     9 public class Student implements Serializable{
    10     private Integer stuno;
    11     private String name;
    12     private Integer gradeid;
    13     //学生与年级属于多多对一的关系
    14     private Grade grade;
    15     
    16     public Student(){}
    17     public Integer getStuno() {
    18         return stuno;
    19     }
    20     public void setStuno(Integer stuno) {
    21         this.stuno = stuno;
    22     }
    23     public String getName() {
    24         return name;
    25     }
    26     public void setName(String name) {
    27         this.name = name;
    28     }
    29     public Integer getGradeid() {
    30         return gradeid;
    31     }
    32     public void setGradeid(Integer gradeid) {
    33         this.gradeid = gradeid;
    34     }
    35     public Grade getGrade() {
    36         return grade;
    37     }
    38     public void setGrade(Grade grade) {
    39         this.grade = grade;
    40     }
    41     
    42     
    43 }
    Student

        grade:

     1 package entity;
     2 
     3 import java.io.Serializable;
     4 import java.util.Set;
     5 /**
     6  * 年级实体类
     7  * @author Administrator
     8  *
     9  */
    10 public class Grade implements Serializable{
    11     //年级编号
    12     private Integer gradeid;
    13     //年级
    14     private String gradename;
    15     
    16     private Set<Student> stu;
    17     
    18     public Grade(){}
    19     
    20     public Set<Student> getStu() {
    21         return stu;
    22     }
    23 
    24     public void setStu(Set<Student> stu) {
    25         this.stu = stu;
    26     }
    27 
    28     public Integer getGradeid() {
    29         return gradeid;
    30     }
    31     public void setGradeid(Integer gradeid) {
    32         this.gradeid = gradeid;
    33     }
    34     public String getGradename() {
    35         return gradename;
    36     }
    37     public void setGradename(String gradename) {
    38         this.gradename = gradename;
    39     }
    40     
    41     
    42     
    43 }
    grade

      2.建立对象之间的关系

     1 <!--grade表-->
     2 <?xml version="1.0"?>
     3 <!DOCTYPE hibernate-mapping PUBLIC 
     4     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
     5     "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
     6 
     7 <hibernate-mapping
     8     package="entity">
     9     
    10     <class name="Grade" table="grade" dynamic-update="true">
    11         <id name="gradeid" type="integer">
    12             <generator class="assigned">
    13                 
    14             </generator>
    15         </id>
    16         <property name="gradename" type="java.lang.String" />
    17         <set name="stu" cascade="all">
    18             <key column="gradeid"/>
    19             <one-to-many class="Student"/>
    20         </set>
    21         
    22     </class>
    23 </hibernate-mapping>
    24 
    25 
    26 <!--student表-->
    27 <?xml version="1.0"?>
    28 <!DOCTYPE hibernate-mapping PUBLIC 
    29     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    30     "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    31 
    32 <hibernate-mapping
    33     package="entity">
    34     
    35     <class name="Student" table="student" dynamic-update="true">
    36         <id name="stuno" type="integer">
    37             <generator class="sequence">
    38                 <param name="sequence">seq_student</param>
    39             </generator>
    40         </id>
    41         <property name="name" type="java.lang.String" />
    42         
    43         <!-- 多对一关系 -->
    44         <many-to-one name="grade" class="Grade">
    45             <column name="gradeid"></column>
    46         </many-to-one>
    47     </class>
    48 </hibernate-mapping>
    两表的配置文件

      3.配置hibernate

     1 <!DOCTYPE hibernate-configuration PUBLIC
     2     "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
     3     "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
     4 
     5 <hibernate-configuration>
     6     <session-factory>
     7         
     8         <!-- 指定oracle对应得dialect -->
     9         <property name="dialect">
    10             org.hibernate.dialect.Oracle10gDialect
    11         </property>
    12         <!-- 数据库jdbc驱动 -->
    13         <property name="connection.driver_class">
    14             oracle.jdbc.driver.OracleDriver
    15         </property>
    16         
    17         <!-- 数据库url -->
    18         <property name="connection.url">
    19             jdbc:oracle:thin:@localhost:1521:XE
    20         </property>
    21         
    22         <!-- 用户名 -->
    23         <property name="connection.username">super_user</property>
    24         <!-- 用户密码 -->
    25         <property name="connection.password">abc123</property>
    26         
    27         <!-- session范围和上下文 -->
    28         <property name="current_session_context_class">thread</property>
    29         <!-- 是否在运行期间生成的SQL输出到日志以供调试 -->
    30         <property name="show_sql">true</property>
    31         <!-- 是否格式化sql -->
    32         <property name="format_sql">true</property>
    33         <!-- 根据映射文件自动生成表-->
    34         <property name="hbm2ddl.auto">update</property> 
    35         <!-- 映射 -->
    36         <mapping resource="entity/Grade.hbm.xml" />
    37         <mapping resource="entity/Student.hbm.xml" />
    38         
    39     </session-factory>
    40 </hibernate-configuration>

      上面配置文件中出现了三个新的配置节点,和新的节点属性:

       1.<set name="stu" cascade="all">   --name指定对象中属性名   cascade:级联 ————》all/none/save-update/delete/都是字面意思

        <key column="gradeid"/>    --指定两个对象关联的主键
        <one-to-many class="Student"/>  --这里是个一对多关系的实体类配置 ,因为我在mapping中配置了package所以这里只写类名
       </set>

       2.<many-to-one name="grade" class="Grade"> --指定对象中处于“一”关系的属性名,并且指明类名

        <column name="gradeid"></column>    --制定关联的主键
        </many-to-one>

       3.<property name="hbm2ddl.auto">update</property>   --指定操作类型

          #hibernate.hbm2ddl.auto create-drop  
          #hibernate.hbm2ddl.auto create
          #hibernate.hbm2ddl.auto update
          #hibernate.hbm2ddl.auto validate

      

      测试代码:

        

     1 package dao;
     2 
     3 import org.hibernate.Session;
     4 import org.hibernate.SessionFactory;
     5 import org.hibernate.Transaction;
     6 import org.hibernate.cfg.Configuration;
     7 
     8 import entity.Grade;
     9 import entity.Student;
    10 
    11 /**
    12  * 多对一关系联动练习
    13  * @author Administrator
    14  *
    15  */
    16 public class StudentDao {
    17     //打开配置
    18     SessionFactory factory=new Configuration().configure().buildSessionFactory();
    19     Session session=null;
    20     
    21     public static void main(String[] args) {
    22         StudentDao stu=new StudentDao();
    23         try {
    24             //stu.update();
    25             stu.del();
    26         } catch (Exception e) {
    27             // TODO Auto-generated catch block
    28             e.printStackTrace();
    29             
    30         }
    31     }
    32     /**
    33      * 新增
    34      */
    35     public void update() throws Exception{
    36         session=factory.openSession();
    37         session.beginTransaction();
    38         //Grade grade=(Grade)session.get(Grade.class, 1);
    39         
    40         Student student=new Student();
    41         Grade grade=new Grade();
    42         grade.setGradeid(1);
    43         grade.setGradename("一年级");
    44         session.save(grade);
    45         student.setName("小明");
    46         student.setGrade(grade);
    47         session.save(student);
    48         session.getTransaction().commit();
    49         System.out.println("成功!");
    50         
    51         session.close();
    52     }
    53     /**
    54      * 删除
    55      */
    56     public void del(){
    57         session=factory.openSession();
    58         session.beginTransaction();
    59         //Student student=(Student)session.get(Student.class, 5);
    60         //级联删除
    61         Grade grade=(Grade)session.get(Grade.class, 1);
    62         session.delete(grade);
    63         //session.delete(student);
    64         session.getTransaction().commit();
    65         System.out.println("成功!");
    66         
    67         session.close();
    68     }
    69 }


       在代码中遇到的问题http://www.cnblogs.com/gcs1995/p/4139422.html

  • 相关阅读:
    几维安全SDK应用加固,全线5折为APP保驾护航
    物联网渗透测试威胁建模,捕捉应用相关安全风险
    【几维安全】Android代码混淆,代码混淆工具,Android版使用详细说明
    畅想物联网安全未来,几维安全让万物互联更安全
    域起网络携手几维安全,护航互联网游戏业务安全
    Android 加密, Android 常用加密, Android So 库高强度加密
    车联网安全威胁分析及防护思路,几维安全为智能汽车保驾护航
    C#实现基于ffmpeg加虹软的人脸识别
    OSX 下搭建Asp.Net vNext的开发环境
    验证码识别记录
  • 原文地址:https://www.cnblogs.com/gcs1995/p/4139679.html
Copyright © 2020-2023  润新知