大雀软件园

首页 软件下载 安卓市场 苹果市场 电脑游戏 安卓游戏 文章资讯 驱动下载
技术开发 网页设计 图形图象 数据库 网络媒体 网络安全 站长CLUB 操作系统 媒体动画 安卓相关
当前位置: 首页 -> 技术开发 -> JSP专区 -> EJB3.0开发之多对多和一对一

EJB3.0开发之多对多和一对一

时间: 2021-07-31 作者:daque

在前方的例子中,咱们演练了一对多和多对一的例子,在本章将演练多对多和一对一的联系。   弟子和教授即是多对多的联系。一个弟子有多个教授,一个教授教多个弟子。   弟子和档案即是一对一的联系(不领会海外的弟子有没有档案?)。   为了实行多对多的联系,数据库中须要关系表,用以在两个实业间创造关系。jboss不妨机动天生关系表,你也不妨@associationtable来指定关系表的消息。   如:   @manytomany(cascade = {cascadetype.create, cascadetype.merge}, fetch = fetchtype.eager, isinverse = true)   @associationtable(table = @table(name = "student_teacher"),   joincolumns = {@joincolumn(name = "teacher_id")},inversejoincolumns = {@joincolumn(name = "student_id")})   @ associationtable的解释证明如次:   @target({method, field})   public @interface associationtable {   table table() default @table(specified=false);   joincolumn[] joincolumns() default {};   joincolumn[] inversejoincolumns() default {};   }   关系表解释指定了关系表的称呼、主表的列和从表的列。   为了实行一对一的联系,须要用@onetoone来解释。   如:   @onetoone(cascade = {cascadetype.all})   @joincolumn(name = "dossier_id")   public dossier getdossier()   {   return dossier;   }   这设置了一个单向的一对一的联系。即使在dossier也设置了关系的关系,那么它即是双向的。双向的道理即是经过一个student实业就不妨搜索到一个dossier,经过一个dossier就不妨搜索到一个student。   @ onetoone的解释证明如次:   @target({method, field}) @retention(runtime)   public @interface onetoone {   string targetentity() default "";   cascadetype[] cascade() default {};   fetchtype fetch() default eager;   boolean optional() default true;   }   这个例子重要有以次几个文献,这个例子重要实行了弟子和教授、弟子和档案之间的联系。student、teacher、dossier都是实业bean。student和dossier是一个双向的onetoone之间的联系,student和teacher是manytomany的联系,也是双向的。和前方的例子一律,咱们仍旧运用client尝试。   student.java:实业bean。   dossier.java:实业bean所依附的类。   teacher.java:实业bean所依附的类。   entitytest.java:对话bean的交易接口   entitytest bean.java:对话bean的实行类   client.java:尝试ejb的存户端类。   jndi.properties:jndi属性文献,供给考察jdni的基础摆设属性。   build.xml:ant 摆设文献,用以编写翻译、颁布、尝试、废除ejb。   底下对准每个文献的实质做一个引见。   student.java   package com.kuaff.ejb3.relationships;   import javax.ejb.cascadetype;   import javax.ejb.entity;   import javax.ejb.fetchtype;   import javax.ejb.generatortype;   import javax.ejb.id;   import javax.ejb.joincolumn;   import javax.ejb.onetoone;   import javax.ejb.manytomany;   import javax.ejb.table;   import javax.ejb.associationtable;   import java.util.arraylist;   import java.util.set;   import java.util.collection;   import java.io.serializable;   @entity   @table(name = "student")   public class student implements serializable   {   private int id;   private string first;   private string last;   private dossier dossier;   private set teachers;   @id(generate = generatortype.auto)   public int getid()   {   return id;   }   public void setid(int id)   {   this.id = id;   }   public void setfirst(string first)   {   this.first = first;   }   public string getfirst()   {   return first;   }   public void setlast(string last)   {   this.last = last;   }   public string getlast()   {   return last;   }   public void setdossier(dossier dossier)   {   this.dossier = dossier;   }   @onetoone(cascade = {cascadetype.all})   @joincolumn(name = "dossier_id")   public dossier getdossier()   {   return dossier;   }   public void setteacher(set teachers)   {   this.teachers = teachers;   }   @manytomany(cascade = {cascadetype.create, cascadetype.merge}, fetch = fetchtype.eager, isinverse = true)   @associationtable(table = @table(name = "student_teacher"),   joincolumns = {@joincolumn(name = "teacher_id")},inversejoincolumns = {@joincolumn(name = "student_id")})   public set getteacher()   {   return teachers;   }   }   dossier.java   package com.kuaff.ejb3.relationships;   import javax.ejb.entity;   import javax.ejb.generatortype;   import javax.ejb.id;   @entity   public class dossier implements java.io.serializable   {   private long id;   private string resume;   @id(generate = generatortype.auto)   public long getid()   {   return id;   }   public void setid(long id)   {   this.id = id;   }   public void setresume(string resume)   {   this.resume = resume;   }   public string getresume()   {   return resume;   }   }   teacher.java   package com.kuaff.ejb3.relationships;   import javax.ejb.associationtable;   import javax.ejb.basic;   import javax.ejb.cascadetype;   import javax.ejb.column;   import javax.ejb.entity;   import javax.ejb.fetchtype;   import javax.ejb.id;   import javax.ejb.joincolumn;   import javax.ejb.manytomany;   import javax.ejb.table;   import javax.ejb.transient;   import javax.ejb.version;   import java.util.set;   import javax.ejb.generatortype;   @entity   public class teacher implements java.io.serializable   {   private long id;   private string resume;   private string name;   private string info;   private set students;   @id(generate = generatortype.identity)   public long getid()   {   return id;   }   public void setid(long id)   {   this.id = id;   }   public void setname(string name)   {   this.name = name;   }   public string getname()   {   return name;   }   public void setinfo(string info)   {   this.info = info;   }   public string getinfo()   {   return info;   }   public void setstudents(set students)   {   this.students = students;   }   @manytomany(cascade = {cascadetype.create, cascadetype.merge}, fetch = fetchtype.eager)   @associationtable(table = @table(name = "student_teacher"),   joincolumns = {@joincolumn(name = "teacher_id",referencedcolumnname="id")},   inversejoincolumns = {@joincolumn(name = "student_id",referencedcolumnname="id")})   public set getstudents()   {   return students;   }   }   entitytest.java   package com.kuaff.ejb3.relationships;   import javax.ejb.remote;   import java.util.list;   @remote   public interface entitytest   {   public void createdata();   public list findbyname(string name);   }   entitytestbean.java      package com.kuaff.ejb3.relationships;   import javax.ejb.entitymanager;   import javax.ejb.inject;   import javax.ejb.stateless;   import java.util.hashset;   import java.util.set;   import java.util.list;   @stateless   public class entitytestbean implements entitytest   {   private @inject entitymanager manager;   public void createdata()   {   teacher teacher1 = new teacher();   teacher teacher2 = new teacher();   set students1 = new hashset();   set students2 = new hashset();   student student1 = new student();   student student2 = new student();   student student3 = new student();   dossier dossier1 = new dossier();   dossier dossier2 = new dossier();   dossier dossier3 = new dossier();   teacher1.setid(new long(1));   teacher1.setname("hushisheng");   teacher1.setinfo("胡时胜熏陶,硕士生导师");   manager.create(teacher1);   teacher2.setid(new long(2));   teacher2.setname("liyongchi");   teacher2.setinfo("李永池熏陶,硕士生导师");   manager.create(teacher2);   student1.setfirst("晁");   student1.setlast("岳攀");   dossier1.setresume("这是晁岳攀的档案");   student1.setdossier(dossier1);   students1.add(student1);   student2.setfirst("赵");   student2.setlast("志伟");   dossier2.setresume("这是赵志伟的档案");   student2.setdossier(dossier2);   students1.add(student2);   student3.setfirst("田");   student3.setlast("明");   dossier3.setresume("这是田明的档案");   student3.setdossier(dossier3);   students2.add(student3);   teacher1.setstudents(students1);   teacher2.setstudents(students2);   }   public list findbyname(string name)   {   return manager.createquery("from teacher t where t.name = :name").setparameter("name", name).listresults();   }   }   在这个对话bean中供给了创造各个实业bean的本领,并供给了搜索教授的本领。   client.java   package com.kuaff.ejb3.secondary;   import javax.naming.initialcontext;   import javax.naming.namingexception;   import java.util.list;   public class client   {   public static void main(string[] args) throws namingexception   {   initialcontext ctx = new initialcontext();   studentdao dao = (studentdao) ctx.lookup(studentdao.class.getname());   int id = dao.create("晁","岳攀","8","smallnest@kuaff.com","男");   dao.create("朱","立焕","6","zhuzhu@kuaff.com","女");   list list = dao.findall();   for(object o:list)   {    student s = (student)o;    system.out.printf("%s%s的性别:%s%n",s.getname().getfirst(),s.getname().getlast(),s.getgender());    dao.evict(s);   }   }   }   这个存户端用来尝试。   请运转{$jboss_home}/bin目次下的run.bat: run –c all,启用jboss。   http://localhost:8080/jmx-console/htmladaptor?action=inspectmbean&name=jboss%3aservice%3dhypersonic%2cdatabase%3dlocaldb,而后挪用startdatabasemanager()本领,翻开hsql处置东西处置数据库。   在eclipse的ant视图中实行ejbjar target。大概在吩咐行下,加入到此工程目次下,实行ant ejbjar,将编写翻译打包颁布此ejb。   在eclipse的ant视图中实行run target。大概在吩咐行下,加入到此工程目次下,实行ant run,尝试这个ejb。

热门阅览

最新排行

Copyright © 2019-2021 大雀软件园(www.daque.cn) All Rights Reserved.