先有数据库如下(MS-SQL2005):
-- 创建 person 表
-- 删除 Person 表
DROP TABLE person ;
-- 创建 Person 表
CREATE TABLE person (
name VARCHAR(100) not null ,
phone VARCHAR(50) not null ,
age INT ,
PRIMARY KEY (name,phone)
)
1.向项目的lib目录中添加commons-lang-x.x.x.jar
2.创建Person类,实现
Serializable 接口
复写 equals 和 hashCode 方法
• equals:对象比较方法
• hashCode:取得 Hash 编码
public boolean equals(Object obj)
{
if (this == obj) {
return true;
}
if (!(obj instanceof Person)) {
return false;
}
PersonKey p = (PersonKey) obj;
return new EqualsBuilder().append(this.name, p.getName()).append(this.phone,
p.getPhone()).isEquals();
}
/**
* Implementation of the hashCode method conforming to the Bloch pattern with
* the exception of array properties (these are very unlikely primary key types).
* @return int
*/
public int hashCode()
{
return new HashCodeBuilder().append(this.name).append(
this.phone).toHashCode();
}
-----Person.hbm.xml----
<?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" >
<!-- DO NOT EDIT: This is a generated file that is synchronized -->
<!-- by MyEclipse Hibernate tool integration. -->
<!-- Created Sat Nov 11 21:36:21 CST 2006 -->
<hibernate-mapping package="org.lxh.hibernate03">
<class name="Person" table="PERSON">
<composite-id name="id" class="PersonKey">
<key-property name="name" column="NAME" type="string"/>
<key-property name="phone" column="PHONE" type="string"/>
</composite-id>
<property name="age" column="AGE" type="int" />
</class>
</hibernate-mapping>
注意class="PersonKey
新建类
PersonKey.java
package org.lxh.hibernate03;
import java.io.Serializable;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
public class PersonKey
implements Serializable
{
private volatile int hashValue = 0;
private java.lang.String name;
private java.lang.String phone;
public PersonKey() {}
public java.lang.String getName()
{
return name;
}
public void setName(java.lang.String name)
{
hashValue = 0;
this.name = name;
}
public java.lang.String getPhone()
{
return phone;
}
public void setPhone(java.lang.String phone)
{
hashValue = 0;
this.phone = phone;
}
public boolean equals(Object obj)
{
if (this == obj) {
return true;
}
if (!(obj instanceof Person)) {
return false;
}
PersonKey p = (PersonKey) obj;
return new EqualsBuilder().append(this.name, p.getName()).append(this.phone,
p.getPhone()).isEquals();
}
public int hashCode()
{
return new HashCodeBuilder().append(this.name).append(
this.phone).toHashCode();
}
}
Person.java
private PersonKey id ;
private int age;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public PersonKey getId() {
return id;
}
public void setId(PersonKey id) {
this.id = id;
}
分享到:
相关推荐
《Hibernate复合主键配置与使用详解》 在Java开发中,Hibernate作为一款强大的ORM框架,大大简化了数据库操作。然而,当我们面临复杂的数据表结构,尤其是涉及到复合主键时,如何在Hibernate中进行配置和使用就显得...
"Hibernate复合主键" Hibernate复合主键是指在 Hibernate 框架中使用复合主键来唯一标识一个实体。复合主键是指由多个字段组成的主键,用于唯一标识一个实体。在本例中,我们将通过一个简单的复合主键的做关联类的...
在Java的持久化框架Hibernate中,复合主键(Composite Key)是一种特殊的数据模型,它用于表示由多个属性共同构成的唯一标识。这种设计通常出现在实体类的某些属性组合起来才能唯一确定一个对象的情况下。本篇文章将...
在Java的持久化框架Hibernate中,复合主键(Composite Key)是一种特殊的数据结构,用于处理具有多个字段作为唯一标识的情况。本教程将深入探讨如何在Hibernate中设置复合主键,并提供一个可直接使用的配置示例。 ...
通过以上的解释,我们可以看到,虽然无主键表在数据库中并不常见,但在某些特定场景下,如复合主键,Hibernate提供了一套完整的解决方案。所提供的资源包括一个简单的Demo,可以实际运行并理解无主键表映射的实现...
当一个表的主键由两个或更多个字段组成时,我们称之为复合主键。复合主键确保了这些字段组合的唯一性,而单个字段可能不是唯一的。 二、为什么要使用复合主键? 在某些情况下,单一字段无法唯一标识表中的记录,...
本篇文章将深入探讨Hibernate如何支持和管理复合主键。 一、理解复合主键 在数据库设计中,复合主键是一种特殊情况,当单个字段不能唯一标识表中的每一行时,可以使用两个或多个字段的组合来创建唯一的标识。例如...
请更名为 Hibernate复合主键.part2.rar
更名为 Hibernate复合主键.part3.rar
如果使用Hibernate开发legacy的数据库应用,对于数据库表中有使用字符串作为主键或者使用复合主键情况,那么对于这些情况的影射档是比较麻烦的。该示例应用演示了两张表ITEM和CATEGORY_ITEM表有主外键关系,并且ITEM...
本章讲解Hibernate中对数据库复合主键的支持
这篇文档将介绍如何使用Hibernate注解来生成复合主键或嵌入式主键。 复合主键(Composite Key)是指由两个或更多个列共同构成的唯一标识,而嵌入式主键(Embedded Key)则是将主键字段嵌入到实体类内部。在不使用...
### Hibernate中对数据库复合主键的支持 #### 一、引言 在软件开发过程中,特别是在J2EE领域中,Hibernate作为一种流行的ORM(Object-Relational Mapping)框架被广泛使用。ORM框架的主要作用是将关系型数据库中的...
在Java的Hibernate框架中,复合主键映射是一种处理多列组合成主键的情况,它使得在数据库表中由两个或更多个字段组成的主键能够被正确地映射到实体类。在使用复合主键时,我们需要遵循一定的步骤和规则。 首先,...
本文将详细探讨如何在SSH框架(Spring、Struts、Hibernate)中的实体类使用`@IdClass`注解来定义复合主键,并阐述其使用方法及注意事项。 #### 二、复合主键的定义与应用场景 复合主键是指由两个或两个以上的字段...
博文链接:https://balaschen.iteye.com/blog/155127