细粒度划分
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 20:51:28 CST 2006 -->
<hibernate-mapping package="org.lxh.hibernate">
<class name="Person" table="PERSON">
<id name="id" column="ID" type="int">
<generator class="assigned" />
</id>
<component name="name" class="org.lxh.hibernate.Name">
<property name="firstname" column="FIRSTNAME" type="string" not-null="true" />
<property name="lastname" column="LASTNAME" type="string" not-null="true" />
</component>
<component name="contact" class="org.lxh.hibernate.Contact">
<property name="address" column="ADDRESS" type="string" not-null="true" />
<property name="zipcode" column="ZIPCODE" type="string" not-null="true" />
<property name="tel" column="TEL" type="string" />
</component>
</class>
</hibernate-mapping>
Person.java
package org.lxh.hibernate;
public class Person {
// 在本类中要包含Name和Contact对象
private int id ;
private Name name ;
private Contact contact ;
public Contact getContact() {
return contact;
}
public void setContact(Contact contact) {
this.contact = contact;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public Name getName() {
return name;
}
public void setName(Name name) {
this.name = name;
}
}
Name.java
package org.lxh.hibernate;
public class Name {
private String firstname ;
private String lastname ;
public String getFirstname() {
return firstname;
}
public void setFirstname(String firstname) {
this.firstname = firstname;
}
public String getLastname() {
return lastname;
}
public void setLastname(String lastname) {
this.lastname = lastname;
}
}
Contact.java
package org.lxh.hibernate;
public class Contact {
private String address ;
private String zipcode ;
private String tel ;
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
public String getZipcode() {
return zipcode;
}
public void setZipcode(String zipcode) {
this.zipcode = zipcode;
}
}
复合主键
如果要实现复合主键,首先类应该先满足以下要求:
1、本类必须实现 Serializable接
2、复写 equals 和 hashCode 方法
· equals:对象比较方法
· hashCode:取得 Hash
对于 equals 和 hashCode方法的复写,可以使用第三方工具:commons-lang-1.0.1.jar
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:30:08 CST 2006 -->
<hibernate-mapping package="org.lxh.hibernate02">
<class name="Person" table="PERSON">
<composite-id>
<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>
Person.java
package org.lxh.hibernate02;
import java.io.Serializable;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
public class Person implements Serializable {
private String name;
private String phone;
private int age;
public boolean equals(Object obj) {
// TODO 自动生成方法存根
if (this == obj) {
return true;
}
if (!(obj instanceof Person)) {
return false;
}
Person p = (Person) obj;
return new EqualsBuilder().append(this.name, p.name).append(this.phone,
p.phone).append(this.age, p.age).isEquals();
}
public int hashCode() {
// TODO 自动生成方法存根
return new HashCodeBuilder().append(this.name).append(this.age).append(
this.phone).toHashCode();
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
PersonOperate.java
package org.lxh.hibernate02;
import org.hibernate.Session;
import org.hibernate.cfg.Configuration;
public class PersonOperate {
private Session session ;
public PersonOperate()
{
this.session = new Configuration().configure().buildSessionFactory().openSession() ;
}
public void insert(Person p)
{
this.session.save(p) ;
this.session.beginTransaction().commit() ;
}
}
分享到:
相关推荐
《Hibernate复合主键配置与使用详解》 在Java开发中,Hibernate作为一款强大的ORM框架,大大简化了数据库操作。然而,当我们面临复杂的数据表结构,尤其是涉及到复合主键时,如何在Hibernate中进行配置和使用就显得...
"Hibernate复合主键" Hibernate复合主键是指在 Hibernate 框架中使用复合主键来唯一标识一个实体。复合主键是指由多个字段组成的主键,用于唯一标识一个实体。在本例中,我们将通过一个简单的复合主键的做关联类的...
在Hibernate中,对无主键表的操作与普通实体基本相同,只是在保存和查询时需要传入整个复合主键对象。例如,创建一个新的订单: ```java OrderKey key = new OrderKey(); key.setCustomerId("123"); key.setOrderId...
在Java的持久化框架Hibernate中,复合主键(Composite Key)是一种特殊的数据结构,用于处理具有多个字段作为唯一标识的情况。本教程将深入探讨如何在Hibernate中设置复合主键,并提供一个可直接使用的配置示例。 ...
一旦完成,Hibernate就可以通过这个复合主键模型与数据库进行交互了。 总之,Hibernate通过`@Embeddable`和`@EmbeddedId`注解支持复合主键的映射,允许开发者根据业务需求灵活地设计数据模型。理解并掌握这一特性,...
在Java的持久化框架Hibernate中,复合主键(Composite Key)是一种特殊的数据结构,用于处理具有多个字段作为唯一标识的情况。本实例将深入探讨如何在Hibernate中实现复合主键,并提供一个具体的示例来帮助理解。 ...
本篇文章将深入探讨Hibernate如何支持和管理复合主键。 一、理解复合主键 在数据库设计中,复合主键是一种特殊情况,当单个字段不能唯一标识表中的每一行时,可以使用两个或多个字段的组合来创建唯一的标识。例如...
### Hibernate中对数据库复合主键的支持 #### 一、引言 在软件开发过程中,特别是在J2EE领域中,Hibernate作为一种流行的ORM(Object-Relational Mapping)框架被广泛使用。ORM框架的主要作用是将关系型数据库中的...
这篇文档将介绍如何使用Hibernate注解来生成复合主键或嵌入式主键。 复合主键(Composite Key)是指由两个或更多个列共同构成的唯一标识,而嵌入式主键(Embedded Key)则是将主键字段嵌入到实体类内部。在不使用...
如果使用Hibernate开发legacy的数据库应用,对于数据库表中有使用字符串作为主键或者使用复合主键情况,那么对于这些情况的影射档是比较麻烦的。该示例应用演示了两张表ITEM和CATEGORY_ITEM表有主外键关系,并且ITEM...
本章讲解Hibernate中对数据库复合主键的支持
请更名为 Hibernate复合主键.part2.rar
更名为 Hibernate复合主键.part3.rar
在Java的Hibernate框架中,复合主键映射是一种处理多列组合成主键的情况,它使得在数据库表中由两个或更多个字段组成的主键能够被正确地映射到实体类。在使用复合主键时,我们需要遵循一定的步骤和规则。 首先,...
在这个场景中,“hibernate使用主键关联的一对一关系”指的是通过共享主键来实现两个实体类之间的这种一对一绑定。下面我们将深入探讨这一主题。 首先,我们需要理解一对一关系的概念。在数据库中,一对一关系意味...
关于Hibernate的各种主键生成策略与配置详解