`
come_for_dream
  • 浏览: 120242 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

Hibernate一对一映射

阅读更多

Hibernate一对一映射

              一对一映射关系在我们的项目中用到的不是太多,但是也是值得学些的一种映射方式,框架的学习在于会用,再会用的情况下理解其思想。

             比如人和一个身份证,这个关系就是一对一关系了,那么就拿这个例子举例好了。一对一关系在hibernate中有基于外键的方式和基于主键的方式。

public class User {
	private Integer userId;
	private String name;
	private IDCard card;

	public User() {
		// TODO Auto-generated constructor stub
	}



	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}


	

	public Integer getUserId() {
		return userId;
	}


	public void setUserId(Integer userId) {
		this.userId = userId;
	}



	public IDCard getCard() {
		return card;
	}



	public void setCard(IDCard card) {
		this.card = card;
	}



	/* (non-Javadoc)
	 * @see java.lang.Object#toString()
	 */
	@Override
	public String toString() {
		return "User [userId=" + userId + ", name=" + name + ", card=" + card
				+ "]";
	}
	
}

 

public class IDCard {
	private Integer cardId;
	private String number;
	private User user;

	public IDCard() {
		// TODO Auto-generated constructor stub
	}

	public Integer getCardId() {
		return cardId;
	}

	public void setCardId(Integer cardId) {
		this.cardId = cardId;
	}

	public String getNumber() {
		return number;
	}

	public void setNumber(String number) {
		this.number = number;
	}

	public User getUser() {
		return user;
	}

	public void setUser(User user) {
		this.user = user;
	}

}

 

     基于外键的一对一的配置文件:

            

<hibernate-mapping>
	<class name="com.zdx.domain.IDCard" table="idcard">
		<id name="cardId" type="integer">
			<column name="cardId" />
			<generator class="native" />
		</id>
		<property name="number"></property>
		<!-- 基于外键的一对一 -->
		<many-to-one name="user" class="com.zdx.domain.User" column="userId"  unique="true" ></many-to-one>

	</class>
</hibernate-mapping>

 

<hibernate-mapping>
	<class name="com.zdx.domain.User" table="user">
		<id name="userId" type="integer">
			<column name="userId" />
			<generator class="native" />
		</id>
		<property name="name"></property>
		<!-- 基于外键的一对一 property-ref是指在IDCard类中User对象的名称 -->
		<one-to-one name="card" class="com.zdx.domain.IDCard"
			property-ref="user"></one-to-one>

	</class>
</hibernate-mapping>

 

 

  基于主键的一对一的配置文件:

<hibernate-mapping>
	<class name="com.zdx.domain.IDCard" table="idcard">
		<id name="cardId" type="integer">
			<column name="cardId" />
			<!-- 采用基于主键的一对一映射时,要把主键生成策略改为foreign
				其中的property参数是表示要使用哪个对象的主键值,
				user的主键值作为自己的主键值
			 -->
			<generator class="foreign">
				<param name="property">user</param>
			</generator>
		</id>
		<property name="number"></property>
		
		 <!-- user属性,表达IDCard与User的一对一。
			采用基于主键的一对一映射方式。
			constrained属性:默认为false,表示不在主键列上加上外键约束,true表示要加上外键约束。
		 -->
		 <one-to-one name="user" class="com.zdx.domain.User" constrained="true"></one-to-one>
	

	</class>
</hibernate-mapping>

 

<hibernate-mapping>
	<class name="com.zdx.domain.User" table="user">
		<id name="userId" type="integer">
			<column name="userId" />
			<generator class="native" />
		</id>
		<property name="name"></property>
		<!-- 基于主键的一对一 -->
		<one-to-one name="card" class="com.zdx.domain.IDCard"></one-to-one>

	</class>
</hibernate-mapping>

 

 

 测试代码:

package com.zdx.test;

import org.junit.Test;

import com.zdx.dao.IDCardDao;
import com.zdx.dao.UserDao;
import com.zdx.dao.impl.IDCardDaoImpl;
import com.zdx.dao.impl.UserDaoImpl;
import com.zdx.domain.IDCard;
import com.zdx.domain.User;

public class UserDaoTest {

	UserDao userDao = new UserDaoImpl();
	IDCardDao cardDao = new IDCardDaoImpl();

	@Test
	public void testSelect() throws Exception {

		User user = userDao.getUserByName("zdx");
		if (user != null) {
			System.out.println("User--->" + user.toString());
		} else {
			System.out.println("无此用户");
		}
	}

	@Test
	public void testSave() throws Exception {
		User user = new User();
		user.setName("sfeewf");

		IDCard card = new IDCard();
		card.setNumber("0023423234354");

		// 关联
		user.setCard(card);
		card.setUser(user);
		userDao.insertUser(user);
		cardDao.insertIDCard(card);
		
	}
}

 

 

 

分享到:
评论

相关推荐

    hibernate一对一映射

    "hibernate一对一映射"是Hibernate中的一个重要概念,它用于表示两个实体类之间一对一的关系。这种关系意味着在一个实体类中,每个实例都唯一对应另一个实体类的单个实例。 一对一映射有以下几种实现方式: 1. **...

    hibernate 映射关系学习入门 一对一映射

    在提供的压缩包`TestHiberOnetoOne`中,可能包含了使用Eclipse创建的Hibernate一对一映射关系的项目源码。你可以通过运行这个项目来更直观地理解一对一映射的工作原理,包括实体类的定义、配置文件的编写以及如何在...

    hibernate一对一映射例子

    本教程将通过一个具体的例子来深入理解Hibernate中的一对一映射。 首先,一对一映射的基本概念:在数据库设计中,一对一关系意味着两个表中的每个记录都唯一对应另一个表中的一个记录。例如,一个人可能只有一个...

    Hibernate 一对一

    深入理解 Hibernate 一对一映射的实现原理,需要阅读 Hibernate 源码,了解其如何生成 SQL 以及如何处理关联对象的加载和更新。 **总结** Hibernate 的一对一映射是 ORM 设计中的重要部分,它使得数据访问更加便捷...

    Hibernate一对一唯一外键关联映射(单向关联)

    在Java的持久化框架Hibernate中,一对一(One-to-One)关联映射是常见的...以上就是关于Hibernate一对一唯一外键关联映射(单向关联)的详细说明。通过这种方式,我们可以轻松地在Java应用中处理数据库的一对一关系。

    hibernate多对多关联映射

    在Java的持久化框架Hibernate中,多对多关联映射是一种常见的关系数据库模型映射方式,用于处理两个实体之间存在多个实例互相关联的情况。本文将深入探讨Hibernate如何实现多对多关联映射,并通过实际例子解析相关...

    Hibernate一对一关联映射(注解)

    ### Hibernate一对一关联映射原理 一对一关联映射是指在数据库中两个表之间存在一对一的关系,例如,一个人只有一个身份证,一个身份证也只属于一个人。在Hibernate中,我们可以通过@OneToOne注解来实现这种映射。 ...

    hibernate 主键一对一映射(单向) 实例(java类)

    本实例将深入探讨如何在Hibernate中实现主键级别的单向一对一映射。 首先,我们理解一对一映射的基本概念。在数据库设计中,一对一映射通常发生在两个表的主键之间,其中一个表的主键是另一个表的外键。在Hibernate...

    hibernate关联映射详解

    包含《多对多双向关联映射》《多对一单向关联映射》《多对一双向关联映射》《一对多单向关联映射》等文档,并有图解及例子,非常适合新手学习,尤其是刚刚接触hibernate,对映射关系不清楚的。。。。

    Hibernate一对一主键关联映射(双向关联)

    标题"Hibernate一对一主键关联映射(双向关联)"中的"主键关联"指的是两个实体通过共享相同的主键来建立关联。"双向关联"则意味着在两个实体类中,都可以直接访问到对方的实例,即在实体A中有一个对实体B的引用,...

    Hibernate一对一主键映射

    在这个实例中,我们将深入探讨Hibernate一对一主键映射的概念、配置以及如何通过源代码和测试程序进行实践。 1. **一对一关系理解**: 一对一关系指的是一个实体类中的记录对应另一个实体类中的唯一一条记录。例如...

    Hibernate一对一外键映射

    **标题:Hibernate一对一外键映射** 在关系型数据库中,一对一(One-to-One)关联是一种常见的关系,它表示两个实体之间存在着唯一的关系。Hibernate,作为Java领域中的一个流行的ORM(对象关系映射)框架,提供了...

    hibernate 一对多多对一的映射

    通过学习和实践Hibernate的一对多和多对一映射,你可以更高效地管理数据库中的复杂关系,使得数据操作更加便捷。在实际项目中,根据业务需求灵活运用这些映射策略,可以极大地提高开发效率和代码的可维护性。

    hibernate一对一主键关联映射(双项关联)

    在Java的持久化框架Hibernate中,一对一(One-to-One)关联映射是一种常见的关系映射方式,用于表示两个实体之间一对一的对应关系。本篇主要探讨的是基于主键(Primary Key)的双向关联映射,这在实际项目中非常常见...

    Hibernate 一对一关联映射(主键关联VS唯一外键关联)

    在Java的持久化框架Hibernate中,一对一(One-to-One)关联映射是常见的关系数据库模型。这篇文章将深入探讨两种主要的一对一关联映射方式:主键关联(Primary Key Join)和唯一外键关联(Foreign Key Join)。我们...

    hibernate(一对多,多对一映射)操作

    本文将深入探讨Hibernate中的一对多和多对一映射关系,并通过一个实际的demo演示它们在增删查改操作中的应用。 首先,我们要理解什么是数据库的关联关系。在数据库设计中,我们经常遇到一种情况,即一个实体可能与...

    hibernate_one_to_one映射简单入门例子

    **一、Hibernate一对一映射简介** 在Java编程中,Hibernate是一个强大的对象关系映射(ORM)框架,它允许开发者将数据库操作转化为面向对象的方式。在数据表之间,有一种常见的关联关系是一对一(One-to-One),即...

    hibernate一对一关联映射

    **标题:** Hibernate一对一关联映射 **描述:** 在Java开发中,Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。一对一(OneToOne)关联映射是Hibernate提供的一种对象关系映射策略,它...

Global site tag (gtag.js) - Google Analytics