zoukankan      html  css  js  c++  java
  • 轻量级ORM开发系列:对象关系以及级联操作的探讨

         ORM全称Object/Relation Mapping 即对象关系映射,既然开发ORM,那就无可避免的要涉及到对象之间的关系。

    通过面向对象思想的抽象, 可以将对象间的关系定义为一下几种:

    • 一对一
    • 多对一(一对多)
    • 多对多

     我们可以很简单的对对象关系建立一个枚举.

     public enum Relation
        {
            None
    =1,
            OneToMany,
            ManyToOne,
            OneToOne,
            ManyToMany
        }

       这个Relation的枚举将会在RelationAttribute中运用,具体情况可以参见 轻量级ORM开发系列:Attribute准备

      下面我们来看一下级联操作

       主流的数据库都支持Cascade操作,下面我们给一个 Cascade操作的小例子——级联删除

    create table a
    (
     id  varchar(
    20) primary key,
     password varchar(
    20) not null
    )

    create table b
    (
     id 
    int identity(1,1)  primary key,
     name varchar(
    50) not null,
     userId varchar(
    20),
     foreign key (userId) references a(id) on delete cascade
    )
    表B创建了外码userId 对应A的主码ID,声明了级联删除
    测试数据:
    insert a values (
    '11','aaa')
    insert a values(
    '23','aaa')
    insert b values(
    'da','11')
    insert b values(
    'das','11')
    insert b values(
    'ww','23')
    删除A表内id为‘
    11’的数据,发现B表内userId 为“11”也被数据库自动删除了,这就是级联删除
    delete a 
    where id='11' 

    数据库一般支持的级联有ON UPDATE CASCADE和ON DELETE CASCADE

    如果我们可以很好的运用这些关系的话,我们就可以实现像nhibernate一样的级联删除。

    下面我们 一个级联枚举

     public enum Cascade
        {
            All,
            SaveOrUpdate,
            Delete,
            None
        }

     这个Cascade的枚举将会在RelationAttribute中运用,具体情况可以参见 轻量级ORM开发系列:Attribute准备

    好了,今天的讨论就到这里了,十点半了。各位晚安!


    博客地址:Zealot Yin

    欢迎转载,转载请注明出处[http://creator.cnblogs.com/]

  • 相关阅读:
    AOP
    资料
    有用快捷键
    Java中getResourceAsStream的用法
    【转载】URL编码与两次encodeURI
    maven 如何使用
    MyEclipse运行Java出错:could not find the main class:test.program will exit(导入项目)
    java集合的操作(set,Iterator)
    java类集框架(ArrayList,LinkedList,Vector区别)
    java线程控制安全
  • 原文地址:https://www.cnblogs.com/Creator/p/1861934.html
Copyright © 2011-2022 走看看