惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

P
Palo Alto Networks Blog
大猫的无限游戏
大猫的无限游戏
Martin Fowler
Martin Fowler
GbyAI
GbyAI
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
量子位
T
The Blog of Author Tim Ferriss
Y
Y Combinator Blog
Microsoft Azure Blog
Microsoft Azure Blog
C
CERT Recently Published Vulnerability Notes
Recent Announcements
Recent Announcements
A
About on SuperTechFans
aimingoo的专栏
aimingoo的专栏
P
Privacy International News Feed
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
博客园 - 叶小钗
L
Lohrmann on Cybersecurity
G
GRAHAM CLULEY
T
The Exploit Database - CXSecurity.com
Hugging Face - Blog
Hugging Face - Blog
P
Proofpoint News Feed
NISL@THU
NISL@THU
博客园 - Franky
C
Cybersecurity and Infrastructure Security Agency CISA
The Register - Security
The Register - Security
M
MIT News - Artificial intelligence
Know Your Adversary
Know Your Adversary
A
Arctic Wolf
F
Full Disclosure
T
Threat Research - Cisco Blogs
P
Privacy & Cybersecurity Law Blog
The Hacker News
The Hacker News
博客园 - 【当耐特】
D
Docker
T
Tailwind CSS Blog
S
SegmentFault 最新的问题
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Jina AI
Jina AI
Help Net Security
Help Net Security
V
Visual Studio Blog
小众软件
小众软件
B
Blog
Vercel News
Vercel News
云风的 BLOG
云风的 BLOG
N
News and Events Feed by Topic
Forbes - Security
Forbes - Security
N
Netflix TechBlog - Medium
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
C
Cisco Blogs
Security Archives - TechRepublic
Security Archives - TechRepublic

博客园 - 涤生

Enterprise Library Caching Application Block(CAB)源代码研究之缓存条目清理后台线程篇 了解ASP.NET底层架构(网络上的翻译) EditPlus中的正则表达式使用--如何使用查找到的原字符 Spring.Net学习笔记一——入门、第一个例子 CodeSmith4.0.2连接SqlServer2005――不允许远程连接 many2many的写法与注意点 One2One主键关联的实现 NHibernate基础学习时遇到的问题 NHibernate学习之一:Many2One遇到的问题 自动提取网页的信息 ,并分析之 权限学习--BlueDavy之技术Blog漫谈权限系统之结尾篇(开源产品、个人观点、知识体系) 权限学习--BlueDavy之技术Blog漫谈权限系统之基于ACL的实现 权限设计学习篇--BlueDavy之技术Blog - 漫谈权限系统之技术策略以及基于RBAC ... 权限设计-之学习篇--来源于BlueDavy之技术Blog Oracle数据库发生Ora-12162错误 Linux下Oracle文件的自动备份与ftp自动上传 BugFree安装手记 CodeSmith3.0x中Oracle的访问 Asp.Net StartKits之Asp.Net Issue Tracker Starter Kit-数据库
Nhibernate继承类的写法
涤生 · 2007-07-19 · via 博客园 - 涤生

继承有三种实现方法即 每个类一张表;每具体类一张表;所有类一张表。

每类一张表,采用连接的写法,所有类引用其父类,采用One2One/Many2One方法引用.

每个具体类一张表,其实就是单表的写法。

所有类一张表,写法如下。

试验环境:Bhb为主类, ExpenseBhb、KindBhb为子类。在数据库中就是通过Kind列来区分的。本示例中,子类未增加任何属性或行为。

其实可以这样理解,以前我一直考虑的编号表该如何处理的问题。

所有类保存在一张表中,则所有类的信息存储在一个Hbm.xml中

Hbm.xml

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">

  <class name="NHibernateStudy.Domain.Bhb, NHibernateStudy.Domain" table="TBL_BHB"

     lazy="false">

    <id name="Id" column="ID" type="Guid"

        unsaved-value="00000000-0000-0000-0000-000000000000">

      <generator class="guid" />

    </id>

    <discriminator column="KIND" type="String" length="50"/>

……

    <subclass name="NHibernateStudy.Domain.ExpenseBhb, NHibernateStudy.Domain" discriminator-value="费用"></subclass>

    <subclass name="NHibernateStudy.Domain.KindBhb, NHibernateStudy.Domain" discriminator-value="类别"></subclass>

  </class>

</hibernate-mapping>

注意其中两点是:

1) discriminator标志出表中是哪个列区分子类的

2) subclass中的discriminator-value,标志出该子类在表中存储在“区分列”中的值

.cs

ExpenseBhb、KindBhb要继承Bhb

编译错误

对于这种所有类放在一张表中的,需要将其公开属性设置为Virtual

调用代码如下:

protected void Button3_Click(object sender, EventArgs e)

    {

        //------费用编号表---Begin-----

        ExpenseBhb expensebhbTmp = new ExpenseBhb();

        expensebhbTmp.Number = 1;

        expensebhbTmp.Name = "营销费用";

        BhbDetail bhbdetailTmp = new BhbDetail();

        bhbdetailTmp.LastChangePerson = "juanWang";

        bhbdetailTmp.Bhb = expensebhbTmp;

……

        //------费用编号表---End--------

        //------类型编号表--Begin-----

        KindBhb kindbhb1 = new KindBhb();

        kindbhb1.Number = 1;

        kindbhb1.Name = "鸟类";

……

        //------类型编号表--End-------

        string sTmp = "Congratulate, We are succeed!";

        ISession session = Sessions.GetSession();

        ITransaction trans = session.BeginTransaction();

        try

        {

            session.Save(bhbdetailTmp);

            session.Save(bhbdetailTmp1);

            session.Save(kindbhb1);

            session.Save(kindbhb2);

            trans.Commit();

        }

        catch

        {

           
            trans.Rollback();
            sTmp = "Sorry, Please try again!";

        }

        finally

        {

            session.Close();

        }

        this.TbxHello.Text = sTmp;

    }