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
    评论
EF(Entity Framework)是一种对象关系映射(ORM)框架,可以简化数据访问和管理过程。在EF中添加一对一关系的数据,需要先创建实体类并定义好它们之间的关系,然后通过DBContext将数据保存到数据库中。下面是一个基本的示例: 假设有两个实体类:Student和Address,一个Student只有一个Address。 ```csharp public class Student { public int Id { get; set; } public string Name { get; set; } public int Age { get; set; } public Address Address { get; set; } // 定义一对一关系 } public class Address { public int Id { get; set; } public string Street { get; set; } public string City { get; set; } public string State { get; set; } public string ZipCode { get; set; } public int StudentId { get; set; } // 定义外键 public Student Student { get; set; } // 定义一对一关系 } ``` 在DBContext类中,需要定义实体之间的关系: ```csharp public class SchoolContext : DbContext { public DbSet<Student> Students { get; set; } public DbSet<Address> Addresses { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<Student>() .HasOne(s => s.Address) .WithOne(a => a.Student) .HasForeignKey<Address>(a => a.StudentId); } } ``` 这里使用了Fluent API来定义实体之间的关系。在HasOne方法中,指定了Student类中的Address属性与Address类中的Student属性之间的关系一对一关系,并且指定了外键StudentId。 接下来就可以使用DBContext将数据保存到数据库中了: ```csharp using (var context = new SchoolContext()) { var student = new Student { Name = "Tom", Age = 18, Address = new Address { Street = "123 Main St", City = "New York", State = "NY", ZipCode = "10001" } }; context.Students.Add(student); context.SaveChanges(); } ``` 这里创建了一个Student对象,并且给它添加了一个Address对象,然后使用DBContext将数据保存到数据库中。保存后可以在数据库中查看到对应的数据。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值