- 浏览: 174063 次
- 性别:
- 来自: 成都
-
文章分类
最新评论
-
gwill_21:
dwr.xml找不到怎么办,难道要自己手写dwr.xml?痛苦 ...
DWR框架 —— 用户注册验证 -
recoba7:
MLDN魔乐科技 Oracle学习笔记 (5) -
lanni2460:
呵呵 尽管现在才看到这个 但是我真的觉得 李老师 讲的很好呢 ...
严重声明,那些恶意诋毁MLDN及李兴华老师的其他培训机构统统走开 -
chian_xxp:
只要把功能实现了,代码结构合理了,代码性能提高了,该注意的注意 ...
业务、业务、业务。。。 -
wzpbb:
密码多少啊??? 给一下啊
MLDN 魔乐科技 Oracle 学习笔记(2)
如果数据库中表使用了复合主键,应该怎样映射?
需要使用一个类来描述主键信息
1、建立表
DROP TABLE user_course ;
CREATE TABLE user_course (
userid varchar(20) ,
cid int ,
status int ,
primary key (userid,cid)
);
2、生成表映射
如果使用了复合主键,则该表生成映射时可以不选择主键生成方式,会自动按照复合主键处理。生成出现了两个类,一个为对应表的pojo类,另一个为UserCourseId类用来描述UserCourse的主键,主键有两个,因此在UserCourseId中包含userid和cid属性。
由于按ID查询时,需要传入一个可以序列化的id值,因此id类必须实现序列化接口
注意:主键类中覆写了equals与hashCode方法,用来判断主键是否重复。
package org.liky.pojo;
public class UserCourse implements java.io.Serializable {
// Fields
private UserCourseId id;
private Integer status;
// Constructors
public UserCourse() {
}
public UserCourse(UserCourseId id) {
this.id = id;
}
public UserCourse(UserCourseId id, Integer status) {
this.id = id;
this.status = status;
}
// Property accessors
public UserCourseId getId() {
return this.id;
}
public void setId(UserCourseId id) {
this.id = id;
}
public Integer getStatus() {
return this.status;
}
public void setStatus(Integer status) {
this.status = status;
}
}
package org.liky.pojo;
public class UserCourseId implements java.io.Serializable {
// Fields
private String userid;
private Integer cid;
// Constructors
public UserCourseId() {
}
public UserCourseId(String userid, Integer cid) {
this.userid = userid;
this.cid = cid;
}
// Property accessors
public String getUserid() {
return this.userid;
}
public void setUserid(String userid) {
this.userid = userid;
}
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;
if (this.getUserid() != null
&& this.userid.equals(castOther.getUserid())) {
if (this.cid != null && this.cid.equals(castOther.getCid())) {
return true;
} else {
return false;
}
} else {
return false;
}
}
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;
}
}
3、查看映射文件
在映射文件中,会通过composite-id对主键属性进行配置,语法与之前的实体映射类似
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="org.liky.pojo.UserCourse" table="user_course" catalog="testdb">
<!-- 表示UserCourse类中id属性为复合主键值,类型为UserCourseId -->
<composite-id name="id" class="org.liky.pojo.UserCourseId">
<!-- 其中的userid属性与userid字段对应 -->
<key-property name="userid" type="java.lang.String">
<column name="userid" length="20" />
</key-property>
<key-property name="cid" type="java.lang.Integer">
<column name="cid" />
</key-property>
</composite-id>
<property name="status" type="java.lang.Integer">
<column name="status" />
</property>
</class>
</hibernate-mapping>
4、测试
public static void main(String[] args) {
UserCourseDAO ucdao = DAOFactory.getTestDAOInstance();
UserCourse uc = new UserCourse();
uc.setStatus(1);
uc.setId(new UserCourseId());
uc.getId().setCid(1);
uc.getId().setUserid("123456789123456789");
try {
ucdao.doCreate(uc);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
需要使用一个类来描述主键信息
1、建立表
DROP TABLE user_course ;
CREATE TABLE user_course (
userid varchar(20) ,
cid int ,
status int ,
primary key (userid,cid)
);
2、生成表映射
如果使用了复合主键,则该表生成映射时可以不选择主键生成方式,会自动按照复合主键处理。生成出现了两个类,一个为对应表的pojo类,另一个为UserCourseId类用来描述UserCourse的主键,主键有两个,因此在UserCourseId中包含userid和cid属性。
由于按ID查询时,需要传入一个可以序列化的id值,因此id类必须实现序列化接口
注意:主键类中覆写了equals与hashCode方法,用来判断主键是否重复。
package org.liky.pojo;
public class UserCourse implements java.io.Serializable {
// Fields
private UserCourseId id;
private Integer status;
// Constructors
public UserCourse() {
}
public UserCourse(UserCourseId id) {
this.id = id;
}
public UserCourse(UserCourseId id, Integer status) {
this.id = id;
this.status = status;
}
// Property accessors
public UserCourseId getId() {
return this.id;
}
public void setId(UserCourseId id) {
this.id = id;
}
public Integer getStatus() {
return this.status;
}
public void setStatus(Integer status) {
this.status = status;
}
}
package org.liky.pojo;
public class UserCourseId implements java.io.Serializable {
// Fields
private String userid;
private Integer cid;
// Constructors
public UserCourseId() {
}
public UserCourseId(String userid, Integer cid) {
this.userid = userid;
this.cid = cid;
}
// Property accessors
public String getUserid() {
return this.userid;
}
public void setUserid(String userid) {
this.userid = userid;
}
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;
if (this.getUserid() != null
&& this.userid.equals(castOther.getUserid())) {
if (this.cid != null && this.cid.equals(castOther.getCid())) {
return true;
} else {
return false;
}
} else {
return false;
}
}
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;
}
}
3、查看映射文件
在映射文件中,会通过composite-id对主键属性进行配置,语法与之前的实体映射类似
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="org.liky.pojo.UserCourse" table="user_course" catalog="testdb">
<!-- 表示UserCourse类中id属性为复合主键值,类型为UserCourseId -->
<composite-id name="id" class="org.liky.pojo.UserCourseId">
<!-- 其中的userid属性与userid字段对应 -->
<key-property name="userid" type="java.lang.String">
<column name="userid" length="20" />
</key-property>
<key-property name="cid" type="java.lang.Integer">
<column name="cid" />
</key-property>
</composite-id>
<property name="status" type="java.lang.Integer">
<column name="status" />
</property>
</class>
</hibernate-mapping>
4、测试
public static void main(String[] args) {
UserCourseDAO ucdao = DAOFactory.getTestDAOInstance();
UserCourse uc = new UserCourse();
uc.setStatus(1);
uc.setId(new UserCourseId());
uc.getId().setCid(1);
uc.getId().setUserid("123456789123456789");
try {
ucdao.doCreate(uc);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
发表评论
-
本小姐回来啦 —— 超级感谢MLDN
2009-08-10 13:24 1612我又回来了!哈哈,报告一个好消息,我已经成功入职博彦科 ... -
现在开始积极的找工作
2009-07-05 19:13 1188学习差不多了,得赶在毕业前找到一个工作啊,本小姐这段时 ... -
素质教育 —— 模拟面试
2009-06-30 19:10 1067今天一天都安排了职业素质的培养,包括简历的指导、技术面 ... -
EJB实体Bean开发的复合主键映射
2009-06-29 21:36 1697复合主键的映射:在Hibernate中是通过一个主键类来完成复 ... -
EJB实体Bean开发
2009-06-29 21:33 996EJB实体Bean开发的数据库连接采用数据源连接池的方式,因此 ... -
EJB3.0
2009-06-28 14:14 1244EJB是SUN公司提出的开发 ... -
JBoss服务器配置
2009-06-25 21:21 2085哦,哦,哦,EJB的准备课程啊。 这里开发使用的是 JB ... -
Spring结合iBATIS进行开发
2009-06-25 21:19 978使用Spring管理iBATIS完全可以参照Spring+Hi ... -
ibatis开发框架
2009-06-25 21:17 1277iBATIS为一个ORMapping框架,可以帮助开发人员完成 ... -
WebService分布式开发
2009-06-24 22:23 1916WebService:用来跨语言传递数据。 数据交互是通过XM ... -
北京下雨了
2009-06-18 19:56 779上次在公交车上,听到电视里放《北京下雨了》,那么北京今天 ... -
JQuery
2009-06-10 21:03 12761、JQuery的基本语法 ... -
AJAX中使用JSON
2009-06-10 21:02 1308在Java开发中,如果要使用JSON进行开发,需要一些支持,这 ... -
AJAX框架 —— JSON基本知识
2009-06-10 21:01 957我真想知道这年头到底有多少种框架。 1、JSON ... -
还应该多帮助同学,才能让自己进步快
2009-06-08 21:57 1012今天对于本小姐来讲还真是相对轻松的一天啊,上周完成了任 ... -
业务、业务、业务。。。
2009-06-03 18:41 1156项目就是业务,项目中都是业务,技术就这么点东西,只要把 ... -
IBM Project 继续中ing....
2009-06-02 19:08 884项目就是要坚持的做下去,而且要想到做到最好,虽然框架很好 ... -
实际开发了
2009-06-01 18:17 898今天开始新的项目了,项目老师帮我们搭建好了SVN服务器, ... -
web学习笔记 —— 数据源
2009-05-31 19:56 1039使用数据源可以提升数据库的操作性能,当然,不管使用与否,对于程 ... -
SSH(Spring + Struts + Hibernate)
2009-05-31 19:47 2500Spring结合Hibernate ...
相关推荐
本篇文章将深入探讨Hibernate如何处理复合主键映射,并通过实例进行解析。 复合主键在数据库设计中是常见的,例如,考虑一个订单明细表,其中订单号(order_id)和商品编号(product_id)结合在一起可以唯一识别一...
在Java的Hibernate框架中,复合主键映射是一种处理多列组合成主键的情况,它使得在数据库表中由两个或更多个字段组成的主键能够被正确地映射到实体类。在使用复合主键时,我们需要遵循一定的步骤和规则。 首先,...
在无主键表映射的情况下,数据库中的表应该没有明确的`PRIMARY KEY`约束,而是依赖于复合主键字段的唯一性。例如: ```sql CREATE TABLE Orders ( customerId VARCHAR(255) NOT NULL, orderId VARCHAR(255) NOT ...
3. 在使用复合主键时,要注意避免在多对一或一对多关系中直接使用复合主键作为外键,这可能导致映射问题。 总结,Hibernate对复合主键的处理为开发者提供了灵活性,使得处理复杂数据模型变得更加便捷。通过正确配置...
复合主键映射通常用于当一个实体的主键不是单一字段,而是由两个或更多个属性组合而成的情况。在给定的例子中,`User`类的主键由`firstName`和`lastName`两个属性共同构成,这在现实世界中可能对应于人的全名,而不...
在Hibernate的映射文件(XML方式)或者使用JPA注解(Java方式)中,需要为复合主键提供相应的配置。对于XML配置,你可能会看到类似以下的设置: ```xml <!-- 其他属性的映射 --> ``` 而在JPA注解...
在Java的持久化框架Hibernate中,复合主键(Composite Key)是一种特殊的数据结构,用于处理具有多个字段作为唯一标识的情况。本实例将深入探讨如何在Hibernate中实现复合主键,并提供一个具体的示例来帮助理解。 ...
在上述文档中,主要讨论了 Hibernate 中的组件(Component)映射、复合主键映射以及悲观锁和乐观锁的概念。 1. **组件(Component)映射**: Component 在 Hibernate 中表示实体对象的一个逻辑组成部分,它没有...
然而,对于复合主键,一般不推荐使用自增策略,因为复合主键通常由业务数据决定,而不是自动递增。 四、复合主键的持久化操作 在进行增删改查操作时,由于复合主键的存在,我们需要确保所有关联的主键值都被正确...
2. **复合主键映射**:使用`@Embeddable`和`@EmbeddedId`注解,定义一个包含多个字段的复合主键类,这个类作为子对象的一部分,存储在父对象的表中。 3. **一对一嵌入映射**:使用`@OneToOne`配合`@MapsId`和`@...
5. **复合主键映射(Composite Key)** 当表的主键由多个字段组成时,需要使用复合主键。在Hibernate中,可以使用`@EmbeddedId`和`@Embeddable`注解来实现。例如,一个订单由订单号和产品ID共同构成主键。 6. **...
本文详细介绍了如何在Hibernate中实现复合主键,包括复合主键类的定义、Hibernate映射文件的配置以及实体类的设计。通过这种方式,我们可以有效地利用复合主键来保证数据的唯一性和完整性。此外,还提供了一个简单的...
### Hibernate中对数据库复合主键的支持 #### 一、引言 在软件开发过程中,特别是在J2EE领域中,Hibernate作为一种流行的ORM(Object-Relational Mapping)框架被广泛使用。ORM框架的主要作用是将关系型数据库中的...
通过这种方式,Hibernate将知道如何处理`UserRole`类,将其映射到具有复合主键的数据库表。 3. 嵌入式主键(Embedded Id): 如果希望将主键字段作为实体类的一部分,而不是单独的类,可以使用`@EmbeddedId`和`@...
- **组合主键到复合主键映射**:当需要将一个实体的主键映射到另一个实体的复合主键时,可以使用 `@MapsId` 注解。 - **次级表映射**:对于需要存储额外信息的情况,可以使用 `@SecondaryTable` 注解来定义次级表。 ...
5. **5复合主键映射和集合映射.ppt**:这部分可能涉及到如何处理复杂的主键结构,以及如何映射和操作集合类型的属性,如List、Set等。 6. **6数据关联.ppt**:讨论了如何在Hibernate中处理对象间的关联,包括外键...
- **复合主键映射**:当需要多个字段共同构成主键时,可以使用`<composite-id>`标签。 4. **数据操作与事务处理**: - **数据保存**:使用`save()`方法将对象持久化到数据库。 - **数据删除**:使用`delete()`...