在ejb3.0中,实体bean可以实现继承关系。 比如有个person的实体bean,它有姓名和性别两个属性。
上帝和女娲造人的时候,造出两种人:man和woman。man和woman都是实体bean,而且他们都继承person。
单一表策略就是副实体和子实体的数据都存放在一张表中,同时指定一列用来区别这些实体。
如:
| @entity @inheritance(strategy = inheritancetype.single_table, discriminatortype = discriminatortype.string) @discriminatorcolumn(name = "p_type", nullable = true) @ inheritance的注释声明如下: @ @target({type}) @retention(runtime) public @interface inheritance { inheritancetype strategy() default single_table; discriminatortype discriminatortype() default string; string discriminatorvalue() default ""; } |
| @discriminatorcolumn注释用在单一表策略和联合表策略上。用来指定区别各实体所需的列。 @target({type}) @retention(runtime) public @interface discriminatorcolumn { string name() default ""; boolean nullable() default false; string columndefinition() default ""; int length() default 10; } |
| package com.kuaff.ejb3.singleinheritance; import javax.ejb.discriminatorcolumn; import javax.ejb.discriminatortype; import javax.ejb.entity; import javax.ejb.generatortype; import javax.ejb.id; import javax.ejb.inheritance; import javax.ejb.inheritancetype; @entity @inheritance(strategy = inheritancetype.single_table, discriminatortype = discriminatortype.string) @discriminatorcolumn(name = "p_type", nullable = true) public class person implements java.io.serializable { private int id; private string name; private string gender; @id(generate = generatortype.auto) public int getid() { return id; } public void setid(int id) { this.id = id; } public string getname() { return name; } public void setname(string name) { this.name = name; } public void setgender(string gender) { this.gender = gender; } public string getgender() { return gender; } } |
| package com.kuaff.ejb3.singleinheritance; import javax.ejb.discriminatortype; import javax.ejb.entity; import javax.ejb.inheritance; import javax.ejb.inheritancetype; @entity @inheritance(strategy = inheritancetype.single_table, discriminatortype = discriminatortype.string, discriminatorvalue = "man") public class man extends person { private boolean isgood; public void setgood(boolean isgood) { this.isgood = isgood; } public boolean isgood() { return isgood; } } |
| package com.kuaff.ejb3.singleinheritance; import javax.ejb.discriminatortype; import javax.ejb.entity; import javax.ejb.inheritance; import javax.ejb.inheritancetype; @entity @inheritance(strategy = inheritancetype.single_table, discriminatortype = discriminatortype.string, discriminatorvalue = "woman") public class woman extends person { private boolean isbeautiful; public void setisbeautiful(boolean isbeautiful) { this.isbeautiful = isbeautiful; } public boolean isisbeautiful() { return isbeautiful; } } |
| package com.kuaff.ejb3.singleinheritance; import javax.ejb.remote; import java.util.list; @remote public interface persondao { public int createman(string name,string gender,boolean b); public int createwoman(string name,string gender,boolean b); public person find(int i); public list findbyname(string name); public list findbyinfo(string gender); } |
| package com.kuaff.ejb3.singleinheritance; import javax.ejb.entitymanager; import javax.ejb.inject; import javax.ejb.stateless; import java.util.list; @stateless public class persondaobean implements persondao { @inject private entitymanager manager; public int createman(string name,string gender,boolean b) { man man = new man(); man.setname(name); man.setgender(gender); man.setgood(b); manager.create(man); return man.getid(); } public int createwoman(string name, string gender,boolean b) { woman woman = new woman(); woman.setname(name); woman.setgender(gender); woman.setisbeautiful(b); manager.create(woman); return woman.getid(); } public person find(int i) { return manager.find(person.class,i); } public list findbyname(string name) { return manager.createquery("from person p where p.name =:name").setparameter("name", name).listresults(); } public list findbyinfo(string gender) { return manager.createquery("from person p where p.gender =:gender").setparameter("gender", gender).listresults(); } } |
| package com.kuaff.ejb3.singleinheritance; 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(); persondao dao = (persondao) ctx.lookup(persondao.class.getname()); int i = dao.createman("晁岳攀","男",true); dao.createwoman("朱立焕","女",true); person p = dao.find(i); system.out.printf("%s的性别:%s%n",p.getname(),p.getgender()); list list = dao.findbyname("朱立焕"); for (object o:list) { woman w = (woman)o; system.out.printf("%s漂亮吗?结论:%b%n",w.getname(),w.isisbeautiful()); } } } |
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 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器