`

Hibernate一对一外键映射

阅读更多
person作为IdCard的一个外键
Person.java
package cn.itcast.hibernate.domain;

public class Person {
	private int id;
	private String name;
	private IdCard idcard;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public IdCard getIdcard() {
		return idcard;
	}
	public void setIdcard(IdCard idcard) {
		this.idcard = idcard;
	}
}


IdCard
package cn.itcast.hibernate.domain;

import java.util.Date;

public class IdCard {
	private int id;
	private Date usefullife;
	private Person person;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}

	public Person getPerson() {
		return person;
	}
	public void setPerson(Person person) {
		this.person = person;
	}
	public Date getUsefullife() {
		return usefullife;
	}
	public void setUsefullife(Date usefullife) {
		this.usefullife = usefullife;
	}
	
}


JavaBean映射文件1(Person.hbm.xml)
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="cn.itcast.hibernate.domain">
	<class name="Person" table="person">
		<id name="id">
			<generator class="native" />
		</id>
		<property name="name" unique="true"/>
		<one-to-one name="idcard" property-ref="person"/>
	</class>

</hibernate-mapping>


JavaBean映射文件2(IdCard.hbm.xml)
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="cn.itcast.hibernate.domain">
	<class name="IdCard" table="id_card">
		<id name="id">
			<generator class="native" />
		</id>
		<property name="usefullife" column="useful_life"/>
		<!-- 为了防止多个IdCard对应同一个人,所以设置 unique="true"-->
		<many-to-one name="person" column="person_id" unique="true"/>
	</class>
</hibernate-mapping>


Hibernate配置文件(hibernate.cfg.xml)
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

	<session-factory>

		<!-- Database connection settings -->
		<property name="connection.driver_class">
			com.mysql.jdbc.Driver
		</property>
		<property name="connection.url">
			jdbc:mysql://localhost:3306/test
		</property>
		<property name="connection.username">root</property>
		<property name="connection.password">123456</property>

		<!-- JDBC connection pool (use the built-in) -->
		<property name="connection.pool_size">1</property>

		<!-- SQL dialect -->
		<property name="dialect">
			org.hibernate.dialect.MySQLDialect
		</property>

		<!-- Echo all executed SQL to stdout -->
		<property name="show_sql">true</property>

		<!-- Drop and re-create the database schema on startup如果没有表则自动创建 -->
		<property name="hbm2ddl.auto">create</property>

		
		<mapping resource="cn/itcast/hibernate/domain/Person.hbm.xml" />
		<mapping resource="cn/itcast/hibernate/domain/IdCard.hbm.xml" />
	</session-factory>

</hibernate-configuration>



One2One.java用来使用映射
package cn.itcast.hibernate;

import java.util.Date;
import java.util.HashSet;
import java.util.Set;

import org.hibernate.Session;
import org.hibernate.Transaction;

import cn.itcast.hibernate.domain.Department;
import cn.itcast.hibernate.domain.Employee;
import cn.itcast.hibernate.domain.IdCard;
import cn.itcast.hibernate.domain.Person;

public class One2One {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		add();
		queryPerson(1);
//		queryIdCard(1);
	}

	static Person queryPerson(int id){
		Session s= null;
		Transaction tx = null;
		try {
			s=HibernateUtil.getSession();
			tx= s.beginTransaction();
			Person person=(Person)s.get(Person.class, id);
			System.out.println(person.getIdcard().getUsefullife());
			tx.commit();
			return person;
		}finally{
			if(s!=null){
				s.close();
			}
		}
	}
	
	static IdCard queryIdCard(int id){
		Session s= null;
		Transaction tx = null;
		try {
			s=HibernateUtil.getSession();
			tx= s.beginTransaction();
			IdCard idCard=(IdCard)s.get(IdCard.class, id);
			System.out.println(idCard.getPerson().getName());
			tx.commit();
			return idCard;
		}finally{
			if(s!=null){
				s.close();
			}
		}
	}
	
	static Person add(){
		Session s= null;
		Transaction tx = null;
		try {
			s=HibernateUtil.getSession();
			tx= s.beginTransaction();
			
			IdCard idcard = new IdCard();
			idcard.setUsefullife(new Date());

			Person person = new Person();
			person.setName("personname1");
			person.setIdcard(idcard);
			
			idcard.setPerson(person);
			s.save(person);
			s.save(idcard);
			tx.commit();
			return person;
		}finally{
			if(s!=null){
				s.close();
			}
		}
	}
}

分享到:
评论

相关推荐

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

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

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

    一、Hibernate一对一关联类型 一对一关联在现实世界中很常见,例如一个人只有一个身份证,一个身份证也只能属于一个人。在数据库设计中,这种关系通常通过主键和外键的方式实现,其中一方的主键作为另一方的外键,...

    hibernate一对一唯一外键关联映射(单项关联)

    在本案例中,我们将详细探讨“hibernate一对一唯一外键关联映射(单项关联)”。 首先,一对一关联分为两种类型:单向关联和双向关联。单向关联意味着在一个实体类中存在对另一实体的引用,而另一实体类中没有相应...

    hibernate一对一唯一外键关联映射(双向关联)

    本篇将深入探讨Hibernate中的一对一唯一外键关联映射,特别是双向关联的实现。 ### 1. 一对一关联概述 一对一关联意味着一个实体只能与另一个实体的单一实例相关联,这种关系通常出现在两个表之间,其中一个表的...

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

    在本文中,我们将详细介绍Hibernate一对一唯一外键关联映射的概念、配置方法和实践应用。 一对一唯一外键关联映射的概念 在Hibernate中,一对一唯一外键关联映射是指两个实体之间的关联关系,其中一个实体作为外键...

    Hibernate一对一单向外键关联 (联合主键annotation)

    在Java的持久化框架Hibernate中,一对一(One-to-One)关联是常见的关系映射类型,它用于表示两个实体之间存在唯一的对应关系。本篇将详细讲解如何使用Hibernate进行一对一单向外键关联,并且该关联涉及到联合主键的...

    hibernate一对一外键关系

    本文将深入探讨Hibernate中的一对一外键关系,这对于初学者来说是非常重要的概念。 一对一(One-to-One)关系是数据库设计中的一个基本关系类型,表示两个实体之间存在唯一的对应关系。例如,在员工管理系统中,一...

    Hibernate一对一单向外键关联(annotation/xml)

    本篇将深入探讨Hibernate中的一对一单向外键关联,通过注解和XML配置两种方式进行实现。这种关联允许一个实体类与另一个实体类之间存在一对一的关系,并且只在其中一个实体类中维护这种关系。 首先,我们来理解一对...

    Hibernate一对一双向外键关联(annotation/xml)

    在Java的持久化框架Hibernate中,一对一双向外键关联是一种常见的关系映射方式,用于表示两个实体类之间一对一的关联关系。在这个场景下,每个实体都有一个引用指向另一个实体,形成双向关联。本篇文章将深入探讨...

    详解Hibernate一对一映射配置

    在Java持久化框架Hibernate中,一对一(One-to-One)映射是对象关系映射的一种常见方式,用于表示两个实体之间一对一的关系。这种关系通常出现在一个实体的实例只能与另一个实体的单个实例相关联的情况。下面我们将...

    hibernate一对一之唯一外键关联(双向关联)

    本篇主要探讨的是Hibernate中的一对一(OneToOne)关系映射,特别是唯一外键关联(UniDirectional and Bidirectional Association)的情况。我们将深入理解这种关联方式的配置、实现以及它在实际应用中的价值。 1. ...

    Hibernate教程05_关系映射之一对一双向外键关联

    在本教程中,我们将深入探讨Hibernate中的一个关键概念——关系映射,特别是“一对一”双向外键关联。这种关联类型在数据库设计中很常见,尤其是在处理具有紧密耦合的实体时。Hibernate作为Java中广泛使用的对象关系...

    Hibernate 一对一外键单向关联

    本篇文章将深入探讨Hibernate中的一对一外键单向关联。 首先,一对一外键关联指的是一个实体通过外键直接引用另一个实体的主键。在单向关联中,只有其中一个实体知道另一个实体的存在,而另一个实体则无感知。这种...

    hibernate 双向一对一基于外键的关联映射

    在本案例中,我们将探讨如何在Hibernate中实现基于外键的双向一对一关联映射。 首先,我们来看一下双向一对一关联的基本概念。双向一对一关联意味着两个实体类A和B,它们之间存在一对一的关系,并且A能访问B,B也能...

    Hibernate教程04_关系映射之一对一单向外键关联

    **标题详解:**“Hibernate教程04_关系映射之一对一单向外键关联” 在Hibernate框架中,关系映射是数据库表之间的关联在对象模型中的体现。本教程重点讲解了一对一(One-to-One)单向外键关联的实现方法。在数据库...

    hibernate一对一之唯一外键关联(单向关联)

    总的来说,Hibernate的一对一唯一外键关联(单向关联)是通过在一方实体中定义另一方实体的引用,并通过注解或XML映射文件进行配置来实现的。这种关联方式简化了对象关系的管理,但同时也需要开发者在操作关联对象时...

Global site tag (gtag.js) - Google Analytics