时间: 2021-07-31 作者:daque
在前方的例子中,咱们每一个实业bean只映照到数据库中的一张表上。究竟上,一个实业bean不妨映照到多张表上。在少许须要字典表的名目上会常常用到,象往日我做过的名目,运用到很多国家标准规则的数据表。在咱们底下这个例子中,性别动作一个字典表生存,弟子这个实业将映照到弟子消息表、性别表这两个表。 从表不妨运用@secondarytable来解释: @target({type}) @retention(runtime) public @interface secondarytable { string name(); string catalog() default ""; string schema() default ""; joincolumn[] join() default {}; uniqueconstraint[] uniqueconstraints() default {}; } 这个解释不妨指定表名、分门别类、schema、共同列、牵制等。假设你运用多张表,你不妨运用底下的解释来证明多张表: @secondarytable @target({type}) @retention(runtime) public @interface secondarytables { secondarytable[] value() default {}; } 这个例子重要有以次几个文献,这个例子重要实行了处置弟子的功效。student是一个实业bean,这个bean的name属性是一个类,也即是name类,这个name类即是一个依附值东西。弟子的性别映照到第二张表中。studentdaobean是一个无状况的对话bean,用来挪用实业bean。和前方的例子一律,咱们仍旧运用client尝试。 这个例子和上一个例子基础沟通,不过student.java和client有所各别。 student.java:实业bean。 name.java:实业bean所依附的类。 studentdao.java:对话bean的交易接口 studentdaobean.java:对话bean的实行类 client.java:尝试ejb的存户端类。 jndi.properties:jndi属性文献,供给考察jdni的基础摆设属性。 build.xml:ant 摆设文献,用以编写翻译、颁布、尝试、废除ejb。 底下对准每个文献的实质做一个引见。 student.java package com.kuaff.ejb3.secondary; import javax.ejb.dependent; import javax.ejb.dependentattribute; import javax.ejb.column; import javax.ejb.entity; import javax.ejb.generatortype; import javax.ejb.id; import javax.ejb.table; import javax.ejb.secondarytables; import javax.ejb.secondarytable; import javax.ejb.joincolumn; @entity @table(name = "student") @secondarytables({ @secondarytable(name = "gender", join = {@joincolumn(name = "gender_id")}) }) public class student implements java.io.serializable { private int id; private name name; private string grade; private string email; private string gender; @id(generate = generatortype.auto) public int getid() { return id; } public void setid(int id) { this.id = id; } public void setname(name name) { this.name = name; } @dependent({ @dependentattribute(name = "first", column ={ @column(name = "first") }), @dependentattribute(name = "last", column ={ @column(name = "last") }) }) public name getname() { return name; } public void setgrade(string grade) { this.grade = grade; } @column(name = "grade") public string getgrade() { return grade; } public void setemail(string email) { this.email = email; } @column(name = "email") public string getemail() { return email; } public void setgender(string gender) { this.gender = gender; } @column(name = "gender", secondarytable = "gender") public string getgender() { return gender; } } student.java实行了student实业bean,它供给弟子的基础情景。在类上证明上加上了第二张表的解释: @secondarytables({ @secondarytable(name = "gender", join = {@joincolumn(name = "gender_id")}) }) 在gender属性上加上了映照第二张的解释: @column(name = "gender", secondarytable = "gender") 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); } 这个存户端减少弟子的分数,而且尝试表露这个弟子的email。 请运转{$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。