服务热线:13616026886

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

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

ejb 3.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 ?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。

扫描关注微信公众号