网站首页
JSP空间
动态资讯
开源项目
技术文档
资源下载
J2EE资源
客户论坛
在线支付
 
  技术文档>>JAVA>>新手入门>>基础入门>查看文档  
  ejb 3.0开发指南之组合主键的方法     
  文章作者:未知  文章来源:水木森林  
  查看:103次  录入:管理员--2007-11-17  
 
  在前面的所有的实体bean的例子中,我们所用的主键都是id,而且都是由容器自动生成的。
  
  如:
  
  @id(generate = generatortype.auto)
  public int getid()
  {
  return id;
  }
  
  事实上,主键可以是任意的java基本类型、或者是基本类型的包装类,如integer、string类型、或者是带字段或属性的主键类。注意,如果这样使用主键,你需要将主键的注释中的生成规则改为none。就是由程序生成主键值。
  
  主键类必须实现hashcode和equals方法。
  
  这个例子前面举例过,就是一个存储学生信息的实体bean,在那个例子中,使用name类作为属性,并且以id作为主键,在这个例子中,我们将使用name作为主键,注意name的类型一个java类。和前面的例子一样,我们还是使用client测试。
  
  name.java:主键。
  
  student.java:实体bean类。
  
  studentdao.java:会话bean的业务接口
  
  studentdaobean.java:会话bean的实现类
  
  client.java:测试ejb的客户端类。
  
  jndi.properties:jndi属性文件,提供访问jdni的基本配置属性。
  
  build.xml:ant 配置文件,用以编译、发布、测试、清除ejb。
  
  下面针对每个文件的内容做一个介绍。
  
  name.java
  
  package com.kuaff.ejb3.composite;
  
  import java.io.serializable;
  import javax.ejb.accesstype;
  import javax.ejb.dependentobject;
  
  @dependentobject(access = accesstype.property)
  
  public class name implements java.io.serializable
  {
  private string first;
  private string last;
  
  public name()
  {
  }
  
  public name(string first, string last)
  {
  this.first = first;
  this.last = last;
  }
  
  public string getfirst()
  {
  return first;
  }
  
  public void setfirst(string first)
  {
  this.first = first;
  }
  
  public string getlast()
  {
  return last;
  }
  
  public void setlast(string last)
  {
  this.last = last;
  }
  
  public int hashcode()
  {
  return (first+last).hashcode();
  }
  
  public boolean equals(object object)
  {
  if (this == object) return true;
  if (object == null) return false;
  if (! (object instanceof name)) return false;
  name name = (name)object;
  if ((name.first.equals(first)) && (name.last.equals(last)))
  return true;
  else
  return false;
  }
  
  }
  
  student.java
  
  package com.kuaff.ejb3.composite;
  
  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;
  
  @entity @table(name = "student") public class student implements java.io.serializable
  {
  private name name;
  private string grade;
  private string email;
  
  public void setname(name name)
  {
  this.name = name;
  }
  
  @id(generate = generatortype.none)
  @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;
  
  studentdao.java
  
  package com.kuaff.ejb3.composite;
  
  import javax.ejb.remote;
  import java.util.list;
  
  @remote
  
  public interface studentdao
  
  {
  
  void create(string first, string last, string grade, string email);
  
  student find(name name);
  
  list findbyfirstname(string name);
  
  list findbylastname(string name);
  
  list findbyemail(string email);
  
  void merge(student s);
  
  }
  
  studentdaobean.java
  
  package com.kuaff.ejb3.composite;
  
  import java.util.list;
  import javax.ejb.entitymanager;
  import javax.ejb.inject;
  import javax.ejb.stateless;
  
  @stateless
  
  public class studentdaobean implements studentdao
  {
  @inject
  private entitymanager manager;
  
  public void create(string first, string last, string grade, string email)
  {
  student student = new student();
  student.setname(new name(first,last));
  student.setgrade(grade);
  student.setemail(email);
  manager.create(student);
  }
  
  public student find(name name)
  {
  return manager.find(student.class, name);
  }
  
  public list findbyfirstname(string name)
  {
  return manager.createquery("from student s where s.name.last = :name").setparameter("name", name).listresults();
  
  }
  
  public list findbylastname(string name)
  {
  return manager.createquery("from student s where s.name.first = :name").setparameter("name", name).listresults();
  }
  
  public list findbyemail(string email)
  {
  return manager.createquery("from student s where s.email = :email").setparameter("email", email).listresults();
  }
  
  public void merge(student s)
  {
  manager.merge(s);
  }
  
  }
  
  client.java
  
  package com.kuaff.ejb3.composite;
  
  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());
  dao.create("晁","岳攀","8","smallnest@kuaff.com");
  dao.create("朱","立焕","6","zhuzhu@kuaff.com");
  name name = new name("朱","立焕");
  
  //list list = dao.findbyemail("zhuzhu@kuaff.com");
  
  student s = dao.find(name);
  system.out.printf("%s %s的email:%s%n",s.getname().getfirst(),s.getname().getlast(),s.getemail());
  /*
  for(object o:list)
  {
  student s = (student)o;
  system.out.printf("%s %s的email:%s%n",s.getname().getfirst(),s.getname().getlast(),s.getemail());
  }
  */
  }
  }
  
  这个客户端用来测试。
  
  请运行{$jboss_home}/bin目录下的run.bat: run ?cc 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。
 
 
上一篇: ejb 技术简介及其 java 应用实例解析    下一篇: ejb3.0开发指南之多对多和一对一
  相关文档
tomcat下jsp、servlet和javabean的配置 11-16
更方便,更强大的分页方式 11-17
java控制台输入,输出 11-17
j2me 2d小游戏入门之游戏的框架 11-16
通过java套接字传递对象 11-17
rss 2.0 specification 11-17
利用jbuilder开发调试servlet 11-17
java语言深入--java中日期的使用方法 02-27
java编程语言最薄弱的部分--线程模型 11-17
java基础:用java简单实现文件分割与合并 12-04
按位“异或”运算符 (^) 11-16
java入门--漫谈java程序的性能优化 03-14
java字符串的简单介绍 11-17
部署war文件和绑定对象到httpsession 11-17
java远程方法调用 (5) 11-17
struts1.2.2新功能全新体验 11-17
java应用的动态扩展 11-17
j2me简单吗? 11-16
如何选中滚动文本框从某一行到某一行 11-17
关于j2se的一些知识和技巧 11-17
返回首页 | 关于我们 | J网章程 | JSP空间合租 | 客服中心 | 免责声明 | 常见问题 | 参观机房
本站主机空间代理至厦门市华众网络科技有限公司
《中华人民共和国增值电信业务经营许可证》
编号:闽B2-20050079
@2005-2008福建JSP技术网 版权所有 闽ICP备05000928号
厦门(总部):13616026886 福州:0591-87655121
邮箱:admin@fjjsp.com 站长QQ,点击这里给我发消息