服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

技术分析ejb3.0开发指南:组合主键


  在前面的所有的实体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 ?c all,启动jboss。
  
  http://localhost:8080/jmx-console/htmladaptor?action=inspect

扫描关注微信公众号