当前位置:首页 > 开发 > 编程语言 > Hibernate > 正文

Hibernate一对一映射

发表于: 2014-12-18   作者:come_for_dream   来源:转载   浏览次数:
摘要: 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一对一映射

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
对象-关系映射(Object/Relation Mapping,简称ORM),是随着面向对象的软件开发方法发展而产生的,
Hibernate one-to-one主键关联映射将两个关联对象的主键保持一致,因而关联在一起。 Person类 publi
Hibernate 一对一外键关联映射需要使用<many-to-one>标签达到目的。关系数据库会在many的一方
Hibernate中一对一关联映射共分为两种,一种是一对一主键关联映射,另一种是一对一唯一外键关联映射
本节讲述一下Hibernate中一对一关系的配置和使用。一对一关系也是比较常见的一种关系,在Hibernate
一对一主键关联: 就是工资卡IdCare表的id既是主键,也是作为关联Person表的外键(id非自动增长)。
<img src="http://img.it610.com/image/product/6f8543b9b4414912a304c88d0ec71831.jpg" alt="hi
一对一主键关联映射:我们来拿人和身份证举例。采用一对一主键关联映射,他要表达的意思是人的id来
还记得多对一的那个例子吗?用户与组。我们在多的一端维护关系,最后生成的表格中,多的一端User中
还记得多对一的那个例子吗?用户与组。我们在多的一端维护关系,最后生成的表格中,多的一端User中
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号