Nhibernate3循序渐进(三): 一对多映射和级联保存

简介: 我们知道, 对于数据库中的一对多关系, 我们在建表的时候, 应该在多表这里建立外键 我们准备这样一个场景, 大学里的系和学生, 一个系有多个学生 Department类和Xml如下: Department.

我们知道, 对于数据库中的一对多关系, 我们在建表的时候, 应该在多表这里建立外键

 

我们准备这样一个场景, 大学里的系和学生, 一个系有多个学生

 

Department类和Xml如下:

 

Department.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace NHibernate3.Domain
{
     public  class Department
    {
         public  virtual  int? ID {  getset; }

         public  virtual  string Name {  getset; }
    }
}

 

Department..hbm.xml

<? xml version="1.0" encoding="utf-8"  ?>

< hibernate-mapping  xmlns ="urn:nhibernate-mapping-2.2"  assembly ="NHibernate3.Domain"  namespace ="NHibernate3.Domain" >
   < class  name ="Department"  table ="T_Department"  lazy ="true"   >
     < id  name ="ID"  type ="int"  column ="DepartmentID" >
       < generator  class ="native" />
     </ id >
  
     < property  name ="Name"  type ="string" >
       < column  name ="Name"  length ="50" />
     </ property >

   </ class >
</ hibernate-mapping >

 

 

Student类和Xml如下:

 

Student.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace NHibernate3.Domain
{
     public  class Student
    {
         public  virtual  int? ID {  getset; }

         public  virtual  string Name {  getset; }

         public  virtual Department Dept {  getset; }
    }
}

 

 

 

Student.hbm.xml

<? xml version="1.0" encoding="utf-8"  ?>

< hibernate-mapping  xmlns ="urn:nhibernate-mapping-2.2"  assembly ="NHibernate3.Domain"  namespace ="NHibernate3.Domain" >
   < class  name ="Student"  table ="T_Student"  lazy ="true"   >
     < id  name ="ID"  type ="int"  column ="StudentID" >
       < generator  class ="native" />
     </ id >

     < property  name ="Name"  type ="string" >
       < column  name ="Name"  length ="50" />
     </ property >

     < many-to-one  name ="Dept"  column ="DepartmentID"  cascade ="all" />

   </ class >
</ hibernate-mapping >

 

 

保存和查询代码

 

ScSession.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using NHibernate;
using NHibernate.Cfg;
using NHibernate3.Domain;

namespace NHibernate3.DAL
{
     public  class ScSession
    {
         private ISessionFactory sessionFactory;

         public ScSession()
        {
             var cfg =  new NHibernate.Cfg.Configuration().Configure( " Config/hibernate.cfg.xml ");
            sessionFactory = cfg.BuildSessionFactory();
        }

         public  void Save()
        {
             using (ISession session =  this.sessionFactory.OpenSession())
            {
                 var dept =  new Department { Name =  " 计算机系 " };

                 var student1 =  new Student { Name =  " 李四 ", Dept = dept };
                 var student2 =  new Student { Name =  " 张三 ", Dept = dept };

                ITransaction tran = session.BeginTransaction();
                 try
                {
                     // 持久化Department类

                    session.Save(student1);
                    session.Save(student2);

                    tran.Commit();
                }
                 catch (Exception ex)
                {
                    tran.Rollback();
                     throw ex;
                }
            }
        }

         public  void GetAll()
        {
             using (ISession session =  this.sessionFactory.OpenSession())
            {
                 var students = session.CreateQuery( "  from Student ").List<Student>();

                Console.WriteLine();
                Console.WriteLine( " ******* 学生信息 ******* ");
                 foreach (Student student  in students)
                {
                    Console.WriteLine( " 学生:{0} ", student.Name);

                    Console.WriteLine( " 系:{0} ", student.Dept.Name);
                }
            }
        }
    }
}

 

运行结果:

记录保存成功!

******* 学生信息 *******
学生:李四
系:计算机系
学生:张三
系:计算机系

 

 

 

 

目录
相关文章
|
SQL XML 存储
Hibernate框架【五】——基本映射——多对多映射
Hibernate框架【五】——基本映射——多对多映射
183 0
|
SQL XML Java
Hibernate框架【四】——基本映射——多对一和一对多映射
Hibernate框架【四】——基本映射——多对一和一对多映射
160 0
|
存储 Java 数据库连接
Hibernate的一对多映射的单向关联和双向关联(九)
Hibernate的一对多映射的单向关联和双向关联(九)
130 0
Hibernate的一对多映射的单向关联和双向关联(九)
|
SQL Oracle Java
hibernate(四) 双向多对多映射关系
现在继上一章节的一对多的映射关系讲解后,今天来讲讲多对多的映射关系把,明白了一对多,多对多个人感觉还是比较容易的,需要理清楚其数据库关系图,那么你就拿下了它。映射文件的配置还是那么些死东西。
159 0
|
Java 数据库连接 数据库
|
存储 Java 数据库连接
hibernate5(10)注解映射[2]一对多单向关联
<div class="markdown_views"> <p>在上一篇文章里,我们从端方向一端建立关联关系,完成了从文章到作者的关联关系建立,但在实际的博客网站中,用户肯定还需要获取自己所写的文章,这时可以建立用户(一)对文章(多)的单向关联映射。 <br> 先来看我们的一方配置实例</p> <pre class="prettyprint"><code class="lan
1862 0
|
SQL Java 数据库连接
hibernate5(9)注解映射[1]多对一单向关联
<div class="markdown_views"> <p>在博客网站中,我们可能需要从某一篇文章找到其所关联的作者,这就需要从文章方建立起对用户的关联,即是多对一的映射关系。 <br> 现在先看一个配置实例:我们的文章实体类</p> <pre class="prettyprint"><code class="language-java hljs "><span clas
2440 0