工具软件   办公软件   操作系统   网络安全   设计在线   程序开发   教程宝典   软件下载   软件论坛
您的位置:软件 > 开发者网络 > 开发工具 > Java > 正文
EJB 3.0开发指南之多表映射
[文章信息]
作者:smallnest
时间:2005-02-07
出处:Java研究组织
责任编辑:方舟
[文章导读]
在前面的例子中,我们每一个实体Bean只映射到数据库中的一张表上。事实上,一个实体Bean可以映射到多张表上
advertisement
热点推荐
· 用VB编写异步多线程下载程序
· 网上保障隐私十大秘技
· 不加重系统负担的下载方法
· PS色彩调整简明教程:匹配颜色
· 制作新春“恭喜发财”小动画
[正文]
  在前面的例子中,我们每一个实体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。

天极社区邀请您:写博客日记  上传相片   论坛聊天  订阅电子杂志  推荐网摘   免费图铃工具
笔名:   请您注意:

 遵守国家有关法律、法规,尊重网上道德,承担一切因您的行为而直接或间接引起的法律责任。

 天极网拥有管理笔名和留言的一切权利。
评论:
 
发表评论推荐给朋友我想参加相关培训打印我对此感兴趣订阅电子杂志
相关内容焦点新闻
  • EJB的困惑:组件与可重用性的矛盾
  • 使用Java操作文本文件的方法详解
  • 谈谈J2SE中的序列化之接受默认序列化
  • 实战Java多线程编程精要之限制优先级
  • EJB 3.0 开发指南之定时服务
  • 网通及中芯有望取代联想进入恒生指数成份股
  • 杜比香港员工被开 内地DVD专利调查前景叵测
  • 飞利浦要求取消诉讼 庭外和解可能依然存在
  • EVD联盟欲集体起诉信产部 具体名单近日公布
  • 首部手机短剧上海开播 每集3分钟共有10集
  • 西门子手机业务全解析 技术优势不是万能的
  • 平板电视可能征零关税 部分厂商盼国家干预
  • 春节太阳黑子活动频繁 打手机不必担忧辐射
  • Advertisement

    天极无线


    奇妙科幻|美好风光|清风车影|漫画卡通|星座生肖|明星写真|动物世界
    老鼠爱大米
    挥着翅膀的女孩
    女人味
    栀子花开
    白月光
    刚刚好
    江南
    快乐崇拜
    亲爱的你怎么不在我身边
    小薇
    2002年的第一场雪
    有多少爱可以重来
    我的地盘
    七里香
    情人
     
    老鼠爱大米 老板电话
    冲动的惩罚 七里香
    我不是黄蓉 女生撒娇
    盛夏的果实 坚持到底
    孤单北半球 眉飞色舞
    挪威的森林 可爱女人
    最浪漫的事 老板电话

    CSEEK搜索