- 浏览: 168151 次
- 性别:
- 来自: 成都
文章分类
最新评论
-
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 1575我又回来了!哈哈,报告一个好消息,我已经成功入职博彦科 ... -
现在开始积极的找工作
2009-07-05 19:13 1143学习差不多了,得赶在毕业前找到一个工作啊,本小姐这段时 ... -
素质教育 —— 模拟面试
2009-06-30 19:10 1015今天一天都安排了职业素质的培养,包括简历的指导、技术面 ... -
EJB实体Bean开发
2009-06-29 21:33 963EJB实体Bean开发的数据库连接采用数据源连接池的方式,因此 ... -
EJB3.0
2009-06-28 14:14 1200EJB是SUN公司提出的开发 ... -
JBoss服务器配置
2009-06-25 21:21 2045哦,哦,哦,EJB的准备课程啊。 这里开发使用的是 JB ... -
Spring结合iBATIS进行开发
2009-06-25 21:19 936使用Spring管理iBATIS完全可以参照Spring+Hi ... -
ibatis开发框架
2009-06-25 21:17 1219iBATIS为一个ORMapping框架,可以帮助开发人员完成 ... -
WebService分布式开发
2009-06-24 22:23 1877WebService:用来跨语言传递数据。 数据交互是通过XM ... -
北京下雨了
2009-06-18 19:56 734上次在公交车上,听到电视里放《北京下雨了》,那么北京今天 ... -
JQuery
2009-06-10 21:03 12201、JQuery的基本语法 ... -
AJAX中使用JSON
2009-06-10 21:02 1277在Java开发中,如果要使用JSON进行开发,需要一些支持,这 ... -
AJAX框架 —— JSON基本知识
2009-06-10 21:01 908我真想知道这年头到底有多少种框架。 1、JSON ... -
还应该多帮助同学,才能让自己进步快
2009-06-08 21:57 956今天对于本小姐来讲还真是相对轻松的一天啊,上周完成了任 ... -
业务、业务、业务。。。
2009-06-03 18:41 1115项目就是业务,项目中都是业务,技术就这么点东西,只要把 ... -
IBM Project 继续中ing....
2009-06-02 19:08 841项目就是要坚持的做下去,而且要想到做到最好,虽然框架很好 ... -
实际开发了
2009-06-01 18:17 844今天开始新的项目了,项目老师帮我们搭建好了SVN服务器, ... -
web学习笔记 —— 数据源
2009-05-31 19:56 984使用数据源可以提升数据库的操作性能,当然,不管使用与否,对于程 ... -
SSH(Spring + Struts + Hibernate)
2009-05-31 19:47 2464Spring结合Hibernate ... -
Spring中的控制反转(IOC)
2009-05-30 16:29 755什么控制反转,还弄了一个新名词 —— ioc,说白了就 ...
相关推荐
10.4.4 映射实体类的主键 398 10.5 关联关系映射 402 10.5.1 单向N-1关联 403 10.5.2 单向1-1关联 406 10.5.3 单向1-N关联 409 10.5.4 单向N-N关联 411 10.5.5 双向1-1关联 414 10.5.6 双向1-N关联 417 10.5.7...
2.2.6. 映射复合主键与外键 2.2.7. 映射二级表(secondary tables) 2.3. 映射查询 2.3.1. 映射EJBQL/HQL查询 2.3.2. 映射本地化查询 2.4. Hibernate独有的注解扩展 2.4.1. 实体 2.4.2. 标识符 2.4.3. 属性 2.4...
2.2.6. 映射复合主键与外键 2.2.7. 映射二级表(secondary tables) 2.3. 映射查询 2.3.1. 映射EJBQL/HQL查询 2.3.2. 映射本地化查询 2.4. Hibernate独有的注解扩展 2.4.1. 实体 2.4.2. 标识符 2.4.3. 属性 2.4.3.1. ...
2.2.6. 映射复合主键与外键 2.2.7. 映射二级表(secondary tables) 2.3. 映射查询 2.3.1. 映射EJBQL/HQL查询 2.3.2. 映射本地化查询 2.4. Hibernate独有的注解扩展 2.4.1. 实体 2.4.2. 标识符 2.4.3. 属性 2.4...
EJB3.0实例教程PDF 黎活名著 1.2 联系作者.....................................................................................................6.4 单表映射的实体BEAN............................................
15.1.2 按照主键映射 15.2 映射单向多对多关联 15.3 映射双向多对多关联关系 15.3.1 关联两端使用元素 15.3.2 在inverse端使用元素 15.3.3 使用组件类集合 15.3.4 把多对多关联分解为两个一对多关联 ...
15.1.2 按照主键映射 15.2 映射单向多对多关联 15.3 映射双向多对多关联关系 15.3.1 关联两端使用元素 15.3.2 在inverse端使用元素 15.3.3 使用组件类集合 15.3.4 把多对多关联分解为两个一对多关联 ...
15.1.2 按照主键映射 15.2 映射单向多对多关联 15.3 映射双向多对多关联关系 15.3.1 关联两端使用元素 15.3.2 在inverse端使用元素 15.3.3 使用组件类集合 15.3.4 把多对多关联分解为两个一对多关联 ...
15.1.2 按照主键映射 15.2 映射单向多对多关联 15.3 映射双向多对多关联关系 15.3.1 关联两端使用元素 15.3.2 在inverse端使用元素 15.3.3 使用组件类集合 15.3.4 把多对多关联分解为两个一对多关联 ...