论坛登陆 用户名:  密 码:
设为首页  加入收藏
08年北京名校秋季招生
名牌院校免试入学宽进严出,突破考分限制,名校与你零距离,以下院校按报名先后顺序录取,24小时网上报名覆盖全国
  您现在的位置: 中国教育招生在线 >> IT >> JAVA认证 >> IT正文
技术分析EJB3.0开发指南 组合主键
 作者:佚名     2007-3-14 16:18:36        来源:不详  浏览次数:

 

 

 

 

 

 

 

 

在前面的所有的实体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:主键。

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=inspectMBean&name=jboss%3Aservice%3DHypersonic%2Cdatabase%3DlocalDB,然后调用startDatabaseManager()方法,打开HSQL管理工具管理数据库。

在Eclipse的Ant视图中执行ejbjar target。或者在命令行下,进入到此工程目录下,执行ant ejbjar,将编译打包发布此EJB。

在Eclipse的Ant视图中执行run target。或者在命令行下,进入到此工程目录下,执行ant run,测试这个EJB。
(e129)


责任编辑:lss
  相关新闻
JSF经典视图技术-Facelets 实例解析
中国计算机软件专业技术资格和水平考试各地咨询地址
2002年9月三级网络技术笔试试卷及答案
以二级C语言为例分析如何准备计算机考试
2006年9月23日计算机等级考试三级PC技术标准试卷
北京三星通信技术研究有限公司招聘
2004年4月三级网络技术笔试试卷及答案
2003年9月二级VB技术笔试试卷及答案
软件水平考试资料:嵌入式系统分析论文下载
北京地区全国专业技术人员计算机应用能力考试(考试简介
以二级C语言为例分析如何准备计算机考试
中国计算机软件专业技术资格和水平考试各地咨询地址
中国计算机软件专业技术资格和水平考试问答
中国计算机软件专业技术资格和水平考试各省联系地址(报
计算机技术与软件专业技术资格(水平)考试专业类别、
2004年中国计算机软件专业技术资格和水平考试官方简介
北京地区全国专业技术人员计算机应用能力考试(考试简介
2006年上半年计算机技术与软件专业技术资格(水平)考
2006年5月软件设计师考情分析与预测
全国计算机等级考试三级网络技术考完之感想
  评论
现在有100人对本文发表评论
查看所有评论
 
推  荐
 
100本成功必读热销书
热门招生
  北京文理研修学院   前进大学
  北京明园大学   北京建设大学
  北京邮电大学世纪学院   北方工商管理学院
  联想软件定向委培班   香港数码动画学院
  青年企业管理研修学院   北京华夏管理学院
热门培训
网络化办公专家培训认证 电子科技大学软件学院
软件测试工程师培训认证 北大青鸟十大授权培训
IT硬件工程师培训认证班 北京环球雅思荷兰预科
JAVA开发工程师培训 潜能时代IT服务管理培训
网络信息化工程师培训 清华大学继续教育学院
论坛精选
 
有些细节是男人也该注意的风度!最容易读错的字
某强人手机里保存的30条短信 中国十大高薪职业
最感人的十大韩剧经典台词 嫁给工程师的N个理由
爆强!只有一句话的鬼故事 转贴教你如何做妖精
 女人一定要記住的話 女人最好别嫁给最爱的男人
城市联盟
 大连 上海 天津 广州 西安 深圳  天津  青岛  大连  福州  沈阳  青海  连云港  南京  吉林  厦门  威海  辽宁  呼和浩特
Copyright © 2006   www.edu999.com   All rights reserved. 中国教育招生在线  版权所有
北京市通信管理局[2004]字第552号函    京ICP证040442号