ef多条件映射_Hibernate一对一关系映射

1、需求:新增一个用户时,同时增加身份证信息。

2、数据库设计:

619fa27855419048911bd757f678dd84.png

3、说明:以上是基于外键的映射关系,将用户表主键 user_id作为身份证表的外键字段关联起来,作为单独的外键列,保存在数据库中,类似于一对多的映射关系,多方维护一方的主键作为外键。所以基于外键映射方式的一对一关系实际上是特殊的一对多关系映射,只是有一个特殊条件,外键必须唯一。

4、代码:

User.java:

package cn.hxjrjt.domain;
public class User {
	private int userId;
	private String userName;
	// 用户与身份证信息, 一对一关系
	private IdentityCard identityCard;
	
	public int getUserId() {
		return userId;
	}
	public void setUserId(int userId) {
		this.userId = userId;
	}
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public IdentityCard getIdentityCard() {
		return identityCard;
	}
	public void setIdentityCard(IdentityCard identityCard) {
		this.identityCard = identityCard;
	}
}

IdentityCard.java:

package cn.hxjrjt.domain;
public class IdentityCard {
	private int idCardID;
	private String idCardNum;
	private String idCardPlace;
	private User user;
	public int getIdCardID() {
		return idCardID;
	}
	public void setIdCardID(int idCardID) {
		this.idCardID = idCardID;
	}
	public String getIdCardNum() {
		return idCardNum;
	}
	public void setIdCardNum(String idCardNum) {
		this.idCardNum = idCardNum;
	}
	public String getIdCardPlace() {
		return idCardPlace;
	}
	public void setIdCardPlace(String idCardPlace) {
		this.idCardPlace = idCardPlace;
	}
	public User getUser() {
		return user;
	}
	public void setUser(User user) {
		this.user = user;
	}
}

User.hbm.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="cn.hxjrjt.domain">
	<class name="User" table="t_user">
		<id name="userId" column="user_id">
			<generator class="native"></generator>
		</id>   
		<property name="userName" column="user_name" length="20"></property>
		<!-- 配置一对一外键关系的关联 -->
		<one-to-one name="identityCard" class="IdentityCard" property-ref="user"></one-to-one>
	</class>
</hibernate-mapping>

IdentityCard.hbm.xml:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="cn.hxjrjt.domain">
    <class name="IdentityCard" table="t_IdCard">
        <id name="idCardID" column="idcard_id">
            <generator class="native"></generator>
        <property name="idCardNum" column="idcard_num" length="20"></property>   
        <property name="idCardPlace" column="idcard_place" length="20"></property>
        <!-- 一对一映射,有外键方 unique="true" 给外键字段添加唯一约束  -->
	<many-to-one name="user" unique="true" column="user_id" class="User" cascade="save-update"></many-to-one>
    </class>
</hibernate-mapping>

OneToOneTest.java:

package cn.hxjrjt.demo;

import org.hibernate.Session;

import cn.hxjrjt.domain.IdentityCard;
import cn.hxjrjt.domain.User;
import cn.hxjrjt.utils.HibernateUtils;

public class OneToOneTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		getSave();
	}
	
    public static void getSave() {

        Session session = HibernateUtils.getCurrentSession();
        session.beginTransaction();

        // 用户
        User user = new User();
        user.setUserName("cc");
        // 身份证
        IdentityCard idCard = new IdentityCard();
        idCard.setIdCardNum("34250119991010101X");
        idCard.setIdCardPlace("IdCardPlace");
        // 关系
        idCard.setUser(user);

        // ----保存----
        session.save(idCard);

        session.getTransaction().commit();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值