多对一映射

    多对一关系:多个学生对应一个老师

多方类中存在一方类的变量,一方类中或许会有多方类的集合变量.

首先看cascade写在哪一方,那一方有主动权
本例在student(多方...)
在多方增加数据时(一方已经存在),例如:Teacher teacher= (Teacher)session.load(Teacher.class,"005");得到老师后,在用
student.setTeacher(teacher);session.save(student);
如果新建一个一方,那么则new一个teacher();最终student.setTeacher(teacher);session.save(student);同时也会新增teacher

学生类Student
package com.pojo;

/**
* Student generated by MyEclipse Persistence Tools
*/

public class Student implements java.io.Serializable {

// Fields

private Integer id;
private Teacher teacher;
private String sname;

// Constructors

/** default constructor */
public Student() {
}

/** full constructor */
public Student(Teacher teacher, String sname) {
   this.teacher = teacher;
   this.sname = sname;
}

// Property accessors

public Integer getId() {
   return this.id;
}

public void setId(Integer id) {
   this.id = id;
}

public Teacher getTeacher() {
   return this.teacher;
}

public void setTeacher(Teacher teacher) {
   this.teacher = teacher;
}

public String getSname() {
   return this.sname;
}

public void setSname(String sname) {
   this.sname = sname;
}

}
老师实体类Teacher
package com.pojo;

import java.util.Set;

/**
* Teacher generated by MyEclipse Persistence Tools
*/

public class Teacher implements java.io.Serializable {

// Fields

private Integer id;
private String tname;

// Constructors

/** default constructor */
public Teacher() {
}

/** minimal constructor */
public Teacher(String tname) {
   this.tname = tname;
}

/** full constructor */
public Teacher(String tname, Set students) {
   this.tname = tname;
   this.students = students;
}

// Property accessors

public Integer getId() {
   return this.id;
}

public void setId(Integer id) {
   this.id = id;
}

public String getTname() {
   return this.tname;
}

public void setTname(String tname) {
   this.tname = tname;
}

}

以上程序中Teacher类已经是Student类一个属性


Teather映射文件

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="com.pojo.Teacher" table="teacher" schema="dbo" catalog="users">
        <id name="id" type="java.lang.Integer">
            <column name="id" />
            <generator class="native" />
        </id>
        <property name="tname" type="java.lang.String">
            <column name="tname" length="50" not-null="true" />
        </property>
       </class>
</hibernate-mapping>


Student映射文件

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="com.pojo.Student" table="student" schema="dbo" catalog="users">
        <id name="id" type="java.lang.Integer">
            <column name="id" />
            <generator class="native" />
        </id>
        <many-to-one name="teacher" class="com.pojo.Teacher" fetch="select" cascade="save-update" lazy="false">
            <column name="tid" not-null="true" />
        </many-to-one>
        <property name="sname" type="java.lang.String">
            <column name="sname" length="50" not-null="true" />
        </property>
    </class>
</hibernate-mapping>

其中:
        <many-to-one name="teacher" class="com.pojo.Teacher" fetch="select" cascade="save-update" lazy="false">
            <column name="tid" not-null="true" />
        </many-to-one>
表示两个表之间的逻辑关系是多对一关系。

测试多对一的关系

//添加操作
public void Save() {
   // TODO Auto-generated method stub
   Transaction tx=null;
   //开启Session
   Session session =HibernateSessionFactory.getSession();
   try
   {
    //开启事务
    tx=session.beginTransaction();
    //持久化完成
   Student st=new Student();
    Teacher th=new Teacher();
    th.setTname("教师1");
    st.setSname("学生1");
    st.setTeacher(th);
    session.save(st);
    //事务提交
    tx.commit();
  
   }
   catch(Exception ex)
   {
    ex.printStackTrace();
    //事务回滚
    if(tx!=null)
    {
     tx.rollback();
    }
   }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值