- 浏览: 174337 次
- 性别:
- 来自: 成都
-
文章分类
最新评论
-
gwill_21:
dwr.xml找不到怎么办,难道要自己手写dwr.xml?痛苦 ...
DWR框架 —— 用户注册验证 -
recoba7:
MLDN魔乐科技 Oracle学习笔记 (5) -
lanni2460:
呵呵 尽管现在才看到这个 但是我真的觉得 李老师 讲的很好呢 ...
严重声明,那些恶意诋毁MLDN及李兴华老师的其他培训机构统统走开 -
chian_xxp:
只要把功能实现了,代码结构合理了,代码性能提高了,该注意的注意 ...
业务、业务、业务。。。 -
wzpbb:
密码多少啊??? 给一下啊
MLDN 魔乐科技 Oracle 学习笔记(2)
复合主键的映射:在Hibernate中是通过一个主键类来完成复合主键的映射,主键类复写了equals和hashCode方法,用来完成比较功能,以便判断主键值是否重复。
EJB3中也使用该方式完成映射,只是改为通过Annotation来配置关系。
1、在JBoss中配置数据源
方法见四、EJB实体Bean开发
并且保证JBoss中有该数据库连接jar包,例如:
2、建立项目
注意在这里配置数据源连接和选择要连接的数据库。
Driver处选择的数据源同样是在MyEclipse中配置的,方法同Hibernate之前的准备工作相同
3、在persitence.xml中配置数据源连接
配置完成后会在EJB端项目中创建一个persitence.xml文件,在该文件中进行连接等配置
(1)配置数据源
<?xml version="1.0" encoding="UTF-8"?> <persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0">
<persistence-unit name="mysql" transaction-type="JTA"> <jta-data-source>java:jdbc/mysql</jta-data-source> </persistence-unit>
</persistence> |
(2)打开show_sql
<?xml version="1.0" encoding="UTF-8"?> <persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0">
<persistence-unit name="mysql" transaction-type="JTA"> <jta-data-source>java:jdbc/mysql</jta-data-source> <properties> <property name="hibernate.show_sql" value="true"/> </properties> </persistence-unit>
</persistence> |
4、生成EntityBean映射
映射生成了两个实体Bean
一个主键类、一个实体类
package org.mldn.lin.entity;
import javax.persistence.Column; import javax.persistence.Embeddable;
//@Embeddable表示该类是一个复合主键类,该类同样覆写了equals和hashcode方法 @Embeddable public class UserCourseId implements java.io.Serializable {
private String userid;
private Integer cid;
public UserCourseId() { }
public UserCourseId(String userid, Integer cid) { this.userid = userid; this.cid = cid; }
@Column(name = "userid", unique = false, nullable = false, insertable = true, updatable = true, length = 20) public String getUserid() { return this.userid; }
public void setUserid(String userid) { this.userid = userid; }
@Column(name = "cid", unique = false, nullable = false, insertable = true, updatable = true) public Integer getCid() { return this.cid; }
public void setCid(Integer cid) { this.cid = cid; }
public boolean equals(Object other) { if ((this == other)) return true; if ((other == null)) return false; if (!(other instanceof UserCourseId)) return false; UserCourseId castOther = (UserCourseId) other;
return ((this.getUserid() == castOther.getUserid()) || (this .getUserid() != null && castOther.getUserid() != null && this.getUserid().equals( castOther.getUserid()))) && ((this.getCid() == castOther.getCid()) || (this.getCid() != null && castOther.getCid() != null && this.getCid().equals( castOther.getCid()))); }
public int hashCode() { int result = 17;
result = 37 * result + (getUserid() == null ? 0 : this.getUserid().hashCode()); result = 37 * result + (getCid() == null ? 0 : this.getCid().hashCode()); return result; }
} |
package org.mldn.lin.entity;
import javax.persistence.AttributeOverride; import javax.persistence.AttributeOverrides; import javax.persistence.Column; import javax.persistence.EmbeddedId; import javax.persistence.Entity; import javax.persistence.Table;
@Entity @Table(name = "user_course", catalog = "testdb", uniqueConstraints = {}) public class UserCourse implements java.io.Serializable {
private UserCourseId id;
private Integer status;
public UserCourse() { }
public UserCourse(UserCourseId id) { this.id = id; }
public UserCourse(UserCourseId id, Integer status) { this.id = id; this.status = status; }
// Property accessors //表示使用复合主键 @EmbeddedId // 复合主键中包含以下两个属性 @AttributeOverrides( { @AttributeOverride(name = "userid", column = @Column(name = "userid", unique = false, nullable = false, insertable = true, updatable = true, length = 20)), @AttributeOverride(name = "cid", column = @Column(name = "cid", unique = false, nullable = false, insertable = true, updatable = true)) }) public UserCourseId getId() { return this.id; }
public void setId(UserCourseId id) { this.id = id; }
@Column(name = "status", unique = false, nullable = true, insertable = true, updatable = true) public Integer getStatus() { return this.status; }
public void setStatus(Integer status) { this.status = status; }
} |
5、新建SessionBean操作EntityBean
srcànewàEJB3 SessionBean
package org.mldn.lin.session;
import java.util.List;
import javax.ejb.Remote;
import org.mldn.lin.entity.UserCourseId;
@Remote public interface UserCourseDAORemote { public boolean doCreate(UserCourseDAO uc) throws Exception;
public UserCourseDAO findById(UserCourseId id) throws Exception;
public List<UserCourseDAO> findByCid(int cid) throws Exception;
}
|
package org.mldn.lin.session;
import java.util.List;
import javax.ejb.Stateless; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import javax.persistence.Query;
import org.mldn.lin.entity.UserCourseId;
@Stateless public class UserCourseDAO implements UserCourseDAORemote {
@PersistenceContext private EntityManager em;
public boolean doCreate(UserCourseDAO uc) throws Exception { // TODO Auto-generated method stub this.em.persist(uc); return true; }
public List<UserCourseDAO> findByCid(int cid) throws Exception { // TODO Auto-generated method stub String jpql="FROM UserCourse WHERE id.cid=?"; Query q=this.em.createQuery(jpql); q.setParameter(1, cid); return q.getResultList(); }
public UserCourseDAO findById(UserCourseId id) throws Exception { // TODO Auto-generated method stub UserCourseDAO uc=this.em.find(UserCourseDAO.class, id); return uc; }
}
|
6、EJB端项目发布
发布成功
7、在Web端建立测试类测试
通过测试类进行测试,需要将 拷贝到lib下即可
package org.mldn.lin.test;
import java.util.Properties;
import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException;
import org.mldn.lin.entity.UserCourse; import org.mldn.lin.entity.UserCourseId; import org.mldn.lin.session.UserCourseDAORemote;
public class Test {
public static void main(String[] args) { // 定义查找参数,通过定义这些参数找到该公共空间 Properties pro = new Properties(); pro.setProperty("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory"); pro.setProperty("java.naming.provider.url", "192.168.1.187:1099"); pro.setProperty("java.naming.factory.url.pkgs", "org.jboss.naming"); // 通过JNDI查找发布的接口 try { Context ctx = new InitialContext(pro);
// 开始查找接口 UserCourseDAORemote dao = (UserCourseDAORemote) ctx.lookup("UserCourseDAO/remote");
UserCourse uc = new UserCourse(); uc.setId(new UserCourseId()); uc.getId().setCid(1); uc.getId().setUserid("mldn"); uc.setStatus(1);
// 打印结果 //System.out.println(dao.doCreate(uc)); //System.out.println(dao.findById(uc.getId())); System.out.println(dao.findByCid(1).size());
} catch (NamingException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } |
发表评论
-
本小姐回来啦 —— 超级感谢MLDN
2009-08-10 13:24 1616我又回来了!哈哈,报告一个好消息,我已经成功入职博彦科 ... -
现在开始积极的找工作
2009-07-05 19:13 1189学习差不多了,得赶在毕业前找到一个工作啊,本小姐这段时 ... -
素质教育 —— 模拟面试
2009-06-30 19:10 1071今天一天都安排了职业素质的培养,包括简历的指导、技术面 ... -
EJB实体Bean开发
2009-06-29 21:33 1001EJB实体Bean开发的数据库连接采用数据源连接池的方式,因此 ... -
EJB3.0
2009-06-28 14:14 1247EJB是SUN公司提出的开发 ... -
JBoss服务器配置
2009-06-25 21:21 2087哦,哦,哦,EJB的准备课程啊。 这里开发使用的是 JB ... -
Spring结合iBATIS进行开发
2009-06-25 21:19 989使用Spring管理iBATIS完全可以参照Spring+Hi ... -
ibatis开发框架
2009-06-25 21:17 1286iBATIS为一个ORMapping框架,可以帮助开发人员完成 ... -
WebService分布式开发
2009-06-24 22:23 1917WebService:用来跨语言传递数据。 数据交互是通过XM ... -
北京下雨了
2009-06-18 19:56 779上次在公交车上,听到电视里放《北京下雨了》,那么北京今天 ... -
JQuery
2009-06-10 21:03 12771、JQuery的基本语法 ... -
AJAX中使用JSON
2009-06-10 21:02 1309在Java开发中,如果要使用JSON进行开发,需要一些支持,这 ... -
AJAX框架 —— JSON基本知识
2009-06-10 21:01 960我真想知道这年头到底有多少种框架。 1、JSON ... -
还应该多帮助同学,才能让自己进步快
2009-06-08 21:57 1012今天对于本小姐来讲还真是相对轻松的一天啊,上周完成了任 ... -
业务、业务、业务。。。
2009-06-03 18:41 1159项目就是业务,项目中都是业务,技术就这么点东西,只要把 ... -
IBM Project 继续中ing....
2009-06-02 19:08 886项目就是要坚持的做下去,而且要想到做到最好,虽然框架很好 ... -
实际开发了
2009-06-01 18:17 901今天开始新的项目了,项目老师帮我们搭建好了SVN服务器, ... -
web学习笔记 —— 数据源
2009-05-31 19:56 1042使用数据源可以提升数据库的操作性能,当然,不管使用与否,对于程 ... -
SSH(Spring + Struts + Hibernate)
2009-05-31 19:47 2504Spring结合Hibernate ... -
Spring中的控制反转(IOC)
2009-05-30 16:29 784什么控制反转,还弄了一个新名词 —— ioc,说白了就 ...
相关推荐
### EJB注释精解 #### 一、EJB注释概述 ...此外,实体Bean的配置通过`persistence.xml`文件进行管理,而实体Bean本身则通过各种注释来定义其映射关系和主键策略。了解这些注释及其用法对于高效地开发EJB应用至关重要。
6. **实体bean(Entity Beans)**:代表数据库中的持久化对象,EJB3.0中实体bean通过JPA进行管理,可以是无主键的,也可以是基于单个字段的主键或复合主键。 **EJB3.0开发实例:** - **Session Bean**:通过`@...
- **复合主键**: 讲解如何定义和使用复合主键。 #### 七、Web服务(Web Service) - **创建Web服务**: 介绍如何基于EJB 3.0创建Web服务。 - **客户端调用**: 展示如何通过Java代码和ASP脚本来调用Web服务。 #### 八...
- **复合主键**:介绍如何定义和使用复合主键来唯一标识实体Bean实例。 #### 七、Web服务(Web Service) - **Web Service的创建**:讲解如何使用EJB3.0创建Web服务,包括WSDL文件的生成和服务端点的定义。 - **Web ...
8. **复合主键(CompositePK)**:在某些情况下,实体Bean可能需要多个字段作为主键,这可以通过定义复合主键类并使用@Embeddable和@IdClass注解来实现。 9. **定时服务(TimerService)**:EJB 3.0提供了一个定时...
- **复合主键**:说明如何在EJB3中实现复合主键。 #### 七、Web服务 (Web Service) - **创建Web服务**:指导如何创建EJB3 Web服务。 - **客户端调用**: - **Java客户端调用**:提供Java语言调用Web服务的示例代码...
探讨如何使用复合主键来唯一标识实体Bean。 #### 六、Web服务(Web Service) **6.1 WebService的创建** 演示如何使用JAX-WS或JAX-RS标准来创建Web服务。 **6.2 WebService的客户端调用** - **用java语言调用...
EJB3.0通过注解如`@Entity`和`@Table`简化了实体bean的定义,并利用JPA(Java Persistence API)实现了ORM(对象关系映射)。 7. **查询语言** - `Query`可能包含了使用JPQL(Java Persistence Query Language)的...
8. **复合主键**:介绍了如何使用复合主键来唯一标识实体Bean。 9. **Web服务**:包括如何创建和调用Web服务,以及使用Java和ASP进行调用的方法。 #### 四、总结 EJB 3.0 的引入标志着企业级Java开发进入了一个新...
每个包含复合主键的实体bean需要在主键类上使用`@IdClass`注解。 3. **TimerService**:EJB 3.0引入了定时器服务,允许开发者安排任务在将来某个时间执行。`TimerService`接口提供了创建定时任务的方法,这些任务...
`@Id`注解定义主键字段,如果需要复合主键,可以使用`@IdClass`或`@EmbeddedId`。例如: ```java @Entity @Table(name = "USER_TABLE") public class User { @Id private String userId; // 其他属性和方法 } ``...
##### 6.4 单表映射的实体 Bean - **定义**: 映射到数据库中的单一表。 - **示例**: ```java @Entity @Table(name = "USER") public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) ...
4. **单表映射的实体 BEAN**: - 单表映射是最基本的 ORM 映射方式。 - 实体类与数据库表一一对应。 5. **持久化实体管理器 ENTITY MANAGER**: - 提供了一系列方法用于实体对象的持久化操作。 - 如 `persist()...
9. **EntityEjb**: 这个目录可能包含了额外的实体Bean示例,可能更深入地探讨了JPA的高级特性,如继承、多态性、复合主键、查询语言(JPQL)等。 10. **mdb**: 最后,这个目录可能包含了更多关于MDB的配置和实现...