Hibernate的那些事-manyToOne映射

----多对一的关系映射,在这里我们有一个实例,就是销售订单与销售人员的关系,我们假设一个销售人员可以有多个订单,同时一个订单只能有一个销售人员来产生。以下为这两个类:

订单类:

package manyToOne;

public class CarOrder {
 private int id;
 private String carName;
 private Salesman salesman;

 public int getId() {
  return id;
 }

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

 public String getCarName() {
  return carName;
 }

 public void setCarName(String carName) {
  this.carName = carName;
 }

 public Salesman getSalesman() {
  return salesman;
 }

 public void setSalesman(Salesman salesman) {
  this.salesman = salesman;
 }

}
销售人员类:

package manyToOne;

public class Salesman implements java.io.Serializable {
 /**
  *
  */
 private static final long serialVersionUID = 1L;
 private int id;
 private String salesName;

 public int getId() {
  return id;
 }

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

 public String getSalesName() {
  return salesName;
 }

 public void setSalesName(String salesName) {
  this.salesName = salesName;
 }

 public static long getSerialVersionUID() {
  return serialVersionUID;
 }

}
两个映射配置文件:

CarOrder映射文件

<?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">

<hibernate-mapping>
 <class name="manyToOne.CarOrder" table="t_m2o_carorder">
  <id name="id" column="cid">
   <generator class="increment">
   </generator>
  </id>
  <property name="carName" type="java.lang.String">
  </property>
  <!-- 对于manyToOne 是为了指明在多方中生成一个指向一 方的外键 ,
  column是为了标识这个列名,也可以省略不写,不写的话默认外键列名为当前实体中一方的属性名

  <many-to-one name="salesman" column="sid" class="manyToOne.Salesman"
  cascade="all">
  </many-to-one>-->
  <many-to-one name="salesman" cascade="all">
  </many-to-one>


 </class>
</hibernate-mapping>

 

Salesman映射文件:

 

<?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">

<hibernate-mapping>
 <class name="manyToOne.Salesman" table="t_m2o_salesman">
  <id name="id" column="sid">
   <generator class="increment">
   </generator>
  </id>
  <property name="salesName" type="java.lang.String">
  </property>
 </class>
</hibernate-mapping>

编写一个测试类:

在这里本人使用的是Junit测试:

package manyToOne;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;

public class JunitTestManyToOne {
 

  private static SessionFactory sessionFactory;
  @BeforeClass
  public static void beforClass(){
   sessionFactory = new Configuration ().configure()
   .buildSessionFactory();
  
  }
  @AfterClass
  public static void afterClass(){
   if(sessionFactory!=null){
    sessionFactory.close();
   }
  
  }
  @Test
  public void createEntity(){
   Session session =sessionFactory.openSession();
   session.beginTransaction();
   Salesman salesman = new Salesman();
   salesman.setSalesName("skewen");

   CarOrder carOrder = new CarOrder();
   carOrder.setCarName("Volovo");
   CarOrder carOrder1 = new CarOrder();
   carOrder1.setCarName("Ford");
   CarOrder carOrder2 = new CarOrder();
   carOrder2.setCarName("BMW");
   carOrder.setSalesman(salesman);
   carOrder1.setSalesman(salesman);
   carOrder2.setSalesman(salesman);
  /***由于在CarOrder的配置文件——CarOrder.hbm.xml*******
   ***文件的 <many-to-one>的属性中已经指明了cascade="all"***********
   ****这样当CarOrder发生改变时会进行级联操作,我们可以不用保存salesman******
    ***而在保存CarOrder的对象时会自动保存Salesman的实例******/
   //session.save(salesman);
   session.save(carOrder);
   session.save(carOrder1);
   session.save(carOrder2);

  
   session.getTransaction().commit();
   session.close();
  }
  public static void main(String [] args){
   beforClass();
  }

 }

 


 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值