第十章 基于Annotation的关系映射 一对一

如果下面部分内容有不明白的可以查找:

基于Annotation的关系映射 前期准备:http://blog.csdn.net/p_3er/article/details/9061911

基于映射文件共享主键方式实现一对一:http://blog.csdn.net/p_3er/article/details/9004419

基于映射文件唯一外键式实现一对一:http://blog.csdn.net/p_3er/article/details/9004471

1、共享主键方式:

Person:

@Entity
@Table(name = "person", catalog = "hibernate")
public class Person implements java.io.Serializable {
	private Integer id;
	private String name;
	private IdCard idCard;

	public Person() {
	}

	@Id
	@GeneratedValue
	@Column(name = "id", unique = true, nullable = false)
	public Integer getId() {
		return this.id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	@Column(name = "name", nullable = false, length = 45)
	public String getName() {
		return this.name;
	}

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

	@OneToOne(cascade = CascadeType.ALL)
	@PrimaryKeyJoinColumn // 这个注解只能写在主(生成ID)的一端,指向从表
	public IdCard getIdCard() {
		return idCard;
	}

	public void setIdCard(IdCard idCard) {
		this.idCard = idCard;
	}
}

IdCard:

@Entity
@Table(name = "id_card", catalog = "hibernate")
public class IdCard implements java.io.Serializable {

	private Integer id;
	private Person person;
	private String cardNo;

	public IdCard() {
	}

	@Id
	@GenericGenerator(name = "abc", strategy = "foreign", parameters = { @Parameter(name = "property", value = "person") })
	@GeneratedValue(generator = "abc")
	@Column(name = "id", unique = true, nullable = false)
/*
      与映射文件相比较:
         <id name="id" type="java.lang.Integer">
			<column name="id" />
			<generator class="foreign">
				<param name="property">person</param>
			</generator>
		</id>
*/
	public Integer getId() {
		return this.id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	@OneToOne(cascade = CascadeType.ALL)
	@JoinColumn(name = "id", unique = true, nullable = false, insertable = false, updatable = false)
	public Person getPerson() {
		return this.person;
	}

	public void setPerson(Person person) {
		this.person = person;
	}

	@Column(name = "card_no", nullable = false, length = 45)
	public String getCardNo() {
		return this.cardNo;
	}

	public void setCardNo(String cardNo) {
		this.cardNo = cardNo;
	}
}

测试与使用和基于映射文件基本一样:http://blog.csdn.net/p_3er/article/details/9004419

2、唯一外键方式


Person:

@Entity
@Table(name = "person", catalog = "hibernate")
public class Person implements java.io.Serializable {
	private Integer id;
	private String name;
	private IdCard idCard;

	public Person() {
	}

	@Id
	@GeneratedValue
	@Column(name = "id", unique = true, nullable = false)
	public Integer getId() {
		return this.id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	@Column(name = "name", nullable = false, length = 45)
	public String getName() {
		return this.name;
	}

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

	@OneToOne(cascade = CascadeType.ALL,mappedBy="person")
     //<one-to-one name="idCard" property-ref="person"/>  与之前的映射文件比较
    //当指定person中的mappedBy后,关系只能被idcard来主动维护
	public IdCard getIdCard() {
		return idCard;
	}

	public void setIdCard(IdCard idCard) {
		this.idCard = idCard;
	}
}

IdCard:

@Entity
@Table(name = "id_card", catalog = "hibernate")
public class IdCard implements java.io.Serializable {

	private Integer id;
	private Person person;
	private String cardNo;

	public IdCard() {
	}

	@Id
	@GeneratedValue
	@Column(name = "id", unique = true, nullable = false)
	public Integer getId() {
		return this.id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	@OneToOne(cascade = CascadeType.ALL)
	@JoinColumn(name = "person_id", unique = true)
/*
  比较:
	<many-to-one name="person" column="person_id" unique="true" />
*/
	public Person getPerson() {
		return this.person;
	}

	public void setPerson(Person person) {
		this.person = person;
	}

	@Column(name = "card_no", nullable = false, length = 45)
	public String getCardNo() {
		return this.cardNo;
	}

	public void setCardNo(String cardNo) {
		this.cardNo = cardNo;
	}
}

测试与使用和基于映射文件基本一样:http://blog.csdn.net/p_3er/article/details/9004471

时间: 2024-08-31 21:24:20

第十章 基于Annotation的关系映射 一对一的相关文章

第十章 基于Annotation的关系映射 多对一与一对多

如果下面部分内容有不明白的可以查找: 基于Annotation的关系映射 前期准备:http://blog.csdn.net/p_3er/article/details/9061911 基于xml的多对一:http://blog.csdn.net/p_3er/article/details/9036759 基于xml的一对多:http://blog.csdn.net/p_3er/article/details/9036921 本文是把多对一与一对多结合起来了,形成一个双向的映射.如果只想要单向的

第十章 基于Annotation的关系映射 多对多

如果下面部分内容有不明白的可以查找: 基于Annotation的关系映射 前期准备:http://blog.csdn.net/p_3er/article/details/9061911 基于xml的多对多:http://blog.csdn.net/p_3er/article/details/9053415 Student: @Entity @Table(name = "student", catalog = "hibernate") public class Stu

第十章 基于Annotation的关系映射 前期准备

1.使用MyEclipse生成基于Annotation的实体类与映射 这个过程只和第三章所说的的内容基本相同.这是其中有两个地方得注意的. 第三章的内容:http://blog.csdn.net/p_3er/article/details/8965305 注意一:          在通过MyEclipse给项目增加Hibernate功能的时候.我们必须勾上Enable Hibernate Annotations Support.否则在通过MyEclipse生成基于Annotation的实体类时

第九章 关系映射 一对一关系 唯一外键方式实现一对一

如:person与idCard 基于外键的one-to-one可以描述为多对一.   hibernate 一对一唯一外键关联映射(双向关联 Person<---->IdCard )           一对一唯一外键 双向 关联,需要在另一端(person ),添加 <one-to-one> 标签,指示 hibernate 如何加载 其关联对象,默认根据主键加载idcard ,外键关联映射中,因为两个实体采用的是 idcard 的外键维护的关系, 所以不能指定主键加载 idcard

Hibernate -- 注解(Annotation)关系映射

转自:http://www.cnblogs.com/tyler2000/archive/2011/01/20/1940354.html 1. Hibernate Annotation关系映射有下面几种类型:1)一对一外键关联映射(单向) 2)一对一外键关联映射(双向) 3)一对一主键关联映射(不重要)在这不演示 在实际中很少用,使用注解@PrimaryKeyJoinColumn 意思是说,我的主键去参考另外一张表中的主键,作为我的主键,但是在我测试使用 注解一对一主键关联映射,在生成表的时候,数

【HIBERNATE框架开发之六】HIBERNATE中ANNOTATION的关系映射&amp;&amp;组件映射!

本站文章均为 李华明Himi 原创,转载务必在明显处注明:  转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/hibernate/821.html 准备工作,新建两个实体类如下: Husband.class: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 package com.himi;   import ja

【HIBERNATE框架开发之七】HIBERNATE使用ANNOTATION中各种关系映射的CRUD(增删改查)&amp;&amp;集合映射&amp;&amp;继承映射

本站文章均为 李华明Himi 原创,转载务必在明显处注明:  转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/hibernate/822.html       首先对于Annotation中CRUD的C(Create)操作:-------- 假设 :   User (MonyToOne)       Group OK,那么有如下 Junit Code: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 Conf

Hibernate实体关系映射—Annotation

hibernate实体关系映射分为:     单边一对一,双边一对一:     单边一对多,单边多对一:     双边一对多,双边多对一:     单边多对多,双边多对多:     以及主键相同的单双边一对一.下面分别总结这几种关系映射的注解方法: 1.  单边一对一和双边一对一     单边一对一:比如一个学生(Student)有一个学生证(StudentCard),且Student类中有一个StudentCard对象: [java] view plain copy   @Entity    

基于DotNet构件技术的企业级敏捷软件开发平台 - AgileEAS.NET - 数据关系映射ORM

      上一遍我介绍了AgileEAS.NET中统计的数据访问,本文我将来介绍AgileEAS.NET中的ORM实现思路.关于ORM的概念和介绍,我在此就不在重复介绍了,我相信大家都很熟悉这个概念了.       AgileEAS.NETORM并没有采用如NHibernate中映射文件的文件的模式,而是采用了直接硬编码的模式实现,ORM体系设计采用了属性/列>数据对象>数据集合(表)的结构:         最基本的思路是一个记录/实体(IEntity)映射一条记录,一个实体包括若干属性/