`
xuxiaolei
  • 浏览: 150268 次
  • 性别: Icon_minigender_1
  • 来自: 彩虹之巅
社区版块
存档分类

hibernate3 one-ton-one总结之关联表关联实现one-to-one

阅读更多

在hibernate3中,one-to-one关联主要通过3种方式来实现:

(1)共享的关联主键

(2)主外键关联

(3)通过关联表关联

其中,第一和第二中关联很常见,第三种关联因为效率关系很少使用。

下面是通过关联表关联实现one-to-one的简单例子,通过关联表实现one-to-one在网上例子非常少,这个程序我也是试了N长时间才搞定的:

create table person (
 person_id bigint primary key,
 name varchar(255) not null
);

create table address(
 address_id bigint primary key,
 country varchar(255),
 city varchar(255),
 street varchar(255)
);

create table passport (
 passport_id bigint primary key,
 num varchar(255)
);

create table person_mid (
 person_id bigint,
 address_id bigint,
 passport_id bigint,
 unique(person_id),
 primary key(address_id, passport_id),
 foreign key (person_id) references person(person_id),
 foreign key (address_id) references address(address_id),
 foreign key (passport_id) references passport(passport_id)
);

 

package domain;

import java.io.Serializable;

public class Person implements Serializable {
	
	private Long id;
	private String name;
	private Address address;
	private Passport passport;
	
	public Long getId() {
		return id;
	}
	public void setId(Long id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Address getAddress() {
		return address;
	}
	public void setAddress(Address address) {
		this.address = address;
	}
	public Passport getPassport() {
		return passport;
	}
	public void setPassport(Passport passport) {
		this.passport = passport;
	}
}

 

package domain;

import java.io.Serializable;

public class Address implements Serializable {
	private Long id;
	private String country;
	private String city;
	private String street;
	private Person person;
	
	public Long getId() {
		return id;
	}
	public void setId(Long id) {
		this.id = id;
	}
	public String getCountry() {
		return country;
	}
	public void setCountry(String country) {
		this.country = country;
	}
	public String getCity() {
		return city;
	}
	public void setCity(String city) {
		this.city = city;
	}
	public String getStreet() {
		return street;
	}
	public void setStreet(String street) {
		this.street = street;
	}
	public Person getPerson() {
		return person;
	}
	public void setPerson(Person person) {
		this.person = person;
	}
}

 

package domain;

import java.io.Serializable;

public class Passport implements Serializable {
	
	private Long id;
	private String num;
	private Person person;
	
	public Long getId() {
		return id;
	}
	public void setId(Long id) {
		this.id = id;
	}
	public String getNum() {
		return num;
	}
	public void setNum(String num) {
		this.num = num;
	}
	public Person getPerson() {
		return person;
	}
	public void setPerson(Person person) {
		this.person = person;
	}
}

 

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
	<class name="domain.Person" table="person" dynamic-insert="true" >
	
		<id name="id" column="person_id">
			<generator class="sequence" >
				<param name="sequence">seq</param>
			</generator>
		</id>
		
		<property name="name" column="name" not-null="true" />
		
		<join table="person_mid" optional="true" >
			<key column="person_id" />
			<many-to-one name="address" column="address_id" not-null="true" unique="true" cascade="all" />
			<many-to-one name="passport"  column="passport_id" not-null="true" unique="true" cascade="all" />
		</join>
		
	</class>
</hibernate-mapping>

 

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
	<class name="domain.Address" table="address" dynamic-insert="true" >
	
		<id name="id" column="address_id">
			<generator class="foreign" >
				<param name="property">person</param>
			</generator>
		</id>
		
		<property name="country" column="country" not-null="true" />
		<property name="city" column="city" not-null="true" />
		<property name="street" column="street" not-null="true" />
		
		<join table="person_mid" optional="true">
			<key column="address_id" />
			<many-to-one name="person" column="person_id" not-null="true" unique="true" insert="false" update="false" />
		</join>
		
	</class>
</hibernate-mapping>

 

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
	<class name="domain.Passport" table="passport" dynamic-insert="true" >
	
		<id name="id" column="passport_id">
			<generator class="foreign" >
				<param name="property">person</param>
			</generator>
		</id>
		
		<property name="num" column="num" not-null="true" />
		
		<join table="person_mid" optional="true">
			<key column="passport_id" />
			<many-to-one name="person" column="person_id" not-null="true" unique="true" insert="false" update="false" />
		</join>
		
	</class>
</hibernate-mapping>

 

1
2
分享到:
评论

相关推荐

    Hibernate one-to-many / many-to-one关系映射

    总结,Hibernate的one-to-many和many-to-one关系映射是数据库对象关联的基础,理解和熟练掌握它们能帮助开发者更高效地设计和实现Java持久化层。通过合理的配置和实践,可以构建出高性能、易于维护的数据访问层。

    (4)Hibernate中的many-to-one和one-to-many关系

    在双向关联中,一方(通常是one-to-many的一方)需要通过`@OneToMany(mappedBy="")`来指定关联的另一方的属性,而另一方(many-to-one)则无需指定`mappedBy`,直接使用`@ManyToOne`即可。 4. 外键的处理 在one-to-...

    hibernate one-to-one 一对一唯一外键关联映射_单向 and 双向

    在Hibernate中,一对一唯一外键关联映射可以通过 `&lt;many-to-one&gt;` 标签来配置。例如,以下是Person实体与IdCard实体的一对一唯一外键关联映射配置: ```xml &lt;many-to-one name="idCard" column="card_id...

    hibernate学习5之one-to-many双向关联.docx

    `&lt;set&gt;`标签里的`&lt;one-to-many&gt;`子标签指定了与之关联的类。 在XML映射文件中,`Student.hbm.xml`包含了`&lt;many-to-one&gt;`元素,表示学生对象引用了一个班级对象,通过`classesid`列连接。而`Classes.hbm.xml`则使用...

    hibernate-configuration-3.0.dtd、hibernate-mapping-3.0.dtd

    《深入理解Hibernate配置与映射:hibernate-configuration-3.0.dtd与hibernate-mapping-3.0.dtd解析》 在Java世界里,Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。而`hibernate-...

    hibernate:one-to-one

    hibernate:one-to-one 的学习小经验

    Hibernate-one-to-many

    本文将深入探讨Hibernate中一对多(One-to-Many)关系的处理方式,特别是通过外键映射和inverse属性的应用场景。 #### 一对多关系概念 一对多关系在数据库设计中非常常见,它指的是一个实体可以与多个其他实体关联...

    Hibernate应用例子one-to-one

    在Hibernate中,"one-to-one"(一对一)关联是一种常见的关系映射类型,表示两个实体之间存在一对一的对应关系,就像一个人只能有一个护照,或者一辆车只能属于一个人一样。 一、一对一关系的配置 1. **注解配置**...

    (3)Hibernate3.2 中的 one-to-one关系

    在Java的持久化框架Hibernate中,一对一(One-to-One)关联是对象关系映射(ORM)中的一个重要概念,它用于表示两个实体之间一对一的映射关系。本篇将深入探讨Hibernate 3.2中的一对一关系,以及如何在实际项目中...

    Hibernate关联映射-one to one单向外键关联

    本话题主要探讨的是Hibernate中的一种关联映射方式——一对一(One-to-One)单向外键关联。这种关联模式通常用于两个实体之间存在唯一对应的关系,例如一个用户对应一个唯一的账户。 在Hibernate中,一对一关联可以...

    hibernate many-to-many级联保存,级联更新,级联删除

    在Hibernate中,这种关系通过中间关联表(也称为连接表或联合表)来实现,该表包含两个实体的主键作为其外键。 二、配置Many-to-Many关系 在Hibernate配置文件(如hibernate.cfg.xml)中,你需要为实体类定义映射...

    hibernate many-to-one(多对一)及 cascade(级联).doc

    - **外键存储**:在 `User` 表中,需要有一个字段来存储与之关联的 `Group` 的主键值,通常这个字段被称为外键。在上面的例子中,这个字段是 `group_id`。 - **级联操作**:在多对一关系中,可以通过设置级联选项...

    hibernate-release-5.2.10

    2. **库文件**:包含jar包,如hibernate-core.jar、hibernate-entitymanager.jar等,这些是我们在项目中引入Hibernate时需要用到的依赖库。 3. **文档**:通常包括用户指南、API文档、开发者文档等,这些文档提供了...

    Hibernate one-to-many-annotation

    在Hibernate中,`one-to-many`关系是常见的实体间关系之一,表示一个实体可以与多个其他实体相关联。本文将深入探讨`Hibernate one-to-many`注解的使用和实现细节。 ### 一、`@OneToMany`注解概述 `@OneToMany`...

    hibernate-commons-annotations-5.0.1.Final.jar

    总结,`hibernate-commons-annotations-5.0.1.Final.jar`是Hibernate框架的重要组成部分,通过提供丰富的元数据注解,简化了Java对象与数据库之间的映射工作。对它的源码进行深入学习,不仅能够增强对JPA和Hibernate...

    hibernate-jpa-2.0-api-1.0.1.Final.jar

    hibernate-jpa-2.0-api-1.0.1.Final.jar

    hibernate-jpa-2.0-api-1.0.1.Final-sources.jar

    hibernate-jpa-2.0-api-1.0.1.Final-sources.jar hibernate jpa 源代码

    hibernate-jpa-2.1-api-1.0.0.final.jar.zip

    - **级联操作**: 支持在实体之间定义级联操作,如删除一个实体时自动删除与之关联的其他实体。 - **延迟加载**: JPA的懒加载机制使得关联的对象只有在真正需要时才从数据库加载,提高性能。 **3. Hibernate JPA ...

    hibernate-validator-5.0.0.CR2-dist.zip

    使用hibernate-validator 进行校验的jar包,里面包括了基础hibernate-validator-5.0.0.CR2.jar hibernate-validator-annotation-processor-5.0.0.CR2.jar 之外,还包括了el-api-2.2.jar javax.el-2.2.4等项目必不可...

    Hibernate稳定版(hibernate-release-5.3.23.Final.zip)

    Hibernate稳定版(hibernate-release-5.3.23.Final.zip),Hibernate ORM 是一个为应用程序、库和框架提供对象/关系映射 (ORM) 支持的库。它还提供了 JPA 规范的实现,这是 ORM 的标准 Java 规范。

Global site tag (gtag.js) - Google Analytics