选择显示字体大小

kodo ejb:实现类和类之间的关联关系


  对象和对象之间除了继承关系之外,还存在着关联关系:包括分作一对一、一对多、多对一和多对多,由于这几种关系在kodo ejb中的实现原理基本类似,因此本文中主要就一对一类关联关系进行深入的讲述,同时通过简单例子的分析和实践详细的说明如何使用kodo ejb中提供的注释来定义类和类之间的关联关系,剩下的一对多、多对一和多对多三种关系将只在文章最后进行说明,请读者参考一对一关系的实现过程。

  面向对象的世界里,类a和类b之间的一对一关系必须满足如下条件:

  1. 对象a1引用了对象b1

  2. 类a其他对象an不可能应用同样的对象b1
  在关系数据库中,我们通常使用唯一外键的方式来实现一对一关系,下面这个图说明了这种的情况。

asp?p=/2006-4-27/1813330bw83_1.jpg" border="0" align= alt="kodo ejb:实现类和类之间的关联关系(图一)" />

  下面开始介绍一下kodo ejb中和一对一关系实现相关的知识,为了说明的需要,我们首先定义一个虚拟的场景。

  模拟场景

  我们假定要完成一个图书馆管理系统,该系统中需要管理很多书,我们需要记录书的基本信息如编号、书名、出版日期等基本信息,还需要记录书的前言,序等信息。

  假设我们根据上面的需求,将书设计成一个类(book),包括了书的编号和名称两个属性,同时将书的前言信息设计成另外一个类(bookextend),它包括了书的编号和前言信息两个属性。由于一本书有前言而且也不可能有其他的书前言部分会和他一样,所以类book和bookextend之间很自然的形成了一对一的关系。这两个类的属性以及类之间的关系如下图所示。

asp?p=/2006-4-27/4061230bw83_2.jpg" border="0" align= alt="kodo ejb:实现类和类之间的关联关系(图二)" />

  [注]

  1、为了说明的简单,例子设计时每个对象仅仅选择了必要的属性。

  2、上面的设计仅仅为了演示的要求而特意采用,不代表设计合理。

  kodo ejb中和一对一关系实现相关的内容

  在kodo ejb中,我们可以使用简单的.netoone注释来声明类和类之间的一对一关系,另外可选的,我们可以使用joincolumn注释来声明两个类对应的表之间使用什么字段来进行关联。

  .netoone

  .netoone注释提供了5个属性供开发者定义类和类之间一对一关系的细节内容。
  1. targetentity

    class类型的属性。

    定义关系类的类型,默认是该成员属性对应的类类型,所以通常不需要提供定义。

  2. mappedby

    string类型的属性。

    定义类之间的双向关系。如果类之间是单向关系,不需要提供定义,如果类和类之间形成双向关系,我们就需要使用这个属性进行定义,否则可能引起数据一致性的问题。比如上面的演示场景中,我们只是定义book类有bookextend属性,而bookextend并没有book属性,那么他们是单向关系,如何bookextend中也定义了book属性,那么book和bookextend之间就构成了双向关系。

  3. cascade

    cascadetype[]类型。

    该属性定义类和类之间的级联关系。定义的级联关系将被容器视为对当前类对象及其关联类对象采取相同的操作,而且这种关系是递归调用的。举个例子:book和bookextend有级联关系,那么删除book时将同时删除它所对应的bookextend对象。而如果bookextend还和其他的对象之间有级联关系,那么这样的操作会一直递归执行下去。

    cascade的值只能从cascadetype.persist(级联新建)、cascadetype.remove(级联删除)、cascadetype.refresh(级联刷新)、cascadetype.merge(级联更新)中选择一个或多个。还有一个选择是使用cascadetype.all,表示选择全部四项。

  4. fatch

    fetchtype类型的属性。

    可选择项包括:fetchtype.eager和fetchtype.lazy。前者表示关系类在主类加载的时候同时加载,后者表示关系类在被访问时才加载。默认值是fetchtype.eager。

  5. optional

    boolean类型的属性。

    定义该关联类对是否必须存在。如果设置为false,那么该属性就不能设置为null。默认值是true。
  .netoone用法举例
public class book{ // 其他内容… @.netoone(optional=true,cascade=cascadetype.all) public bookextend bookextend; } 
  joincolumn

  joincolumn注释用于定义主类在数据库中对应的表通过什么字段和关系类的主键进行关联,这个注释是可选的,如果不提供该注释,kodo在使用”对象名_id”和关联表进行关联(简单情况下),比如演示场景中类book的bookextend没有使用joincolumn注释进行声明,我们使用kodo ejb提供的mapping tool工具生成表格的时候,book类对应的表book中将自动加入列bookextend_id,它的类型将和bookextend对应表的主键字段id类型保持一致。

  joincolumn注释中有两个属性:name和referencedcolumnname属性。
  1. name

    string类型。

    它用于指定主类对应的表中和关系类的主键进行关联的字段的名称,比如上例中,我们不希望使用默认的bookextend_id字段名进行关联,我们可以在book类中使用joincolumn注释bookextend属性,设置joincolumn注释为自己想要的名字比如extendid或者其他。

  2. referencedcolumnname

    string类型。

    指定关联表中与主表形成关联关系的字段名。主要用于设置区别于主键字段的情况。比如bookextend表中默认使用id进行关联,但现在需要使用其他字段进行关联,我们就可以提供该属性。
  joincolumn用法举例
public class book{ // 其他内容… @.netoone(optional=true,cascade=cascadetype.all) @joincolumn(name="extendid",referencedcolumnname="id") public bookextend bookextend; } 


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons