`
p_3er
  • 浏览: 55761 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

第十章 基于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


分享到:
评论

相关推荐

    Hibernate_Annotation关联映射

    对于一对多的双向映射,如果要一对多这一端维护关联关系,你需要删除mappedBy元素并将多对一这端的@JoinColoumn的insertable和updatabel设置为false。这种方案不会得到什么明显的优化,而且还会增加一些附加的UPDATE...

    compass annotation关联关系

    Compass Annotation 是 Compass 提供的一种基于 Java 注解(Annotation)的映射方式,它可以将 Java 对象的属性与搜索引擎的文档字段关联起来。通过在 Java 类或其属性上添加特定的注解,Compass 可以自动处理对象到...

    基于annotation的aop实现

    基于Annotation的AOP实现是Spring框架的一个重要特性,它极大地简化了AOP的使用。在本篇文章中,我们将深入探讨基于Annotation的AOP实现,特别是动态代理的理念。 首先,了解什么是AOP。AOP的核心概念是“切面”...

    基于Annotation的Servlet配置

    这篇博文"基于Annotation的Servlet配置"探讨了如何使用注解来配置Servlet,让我们深入理解这一现代Web应用开发中的重要概念。 首先,我们来看`@WebServlet`注解。这个注解是Java Servlet API的一部分,可以直接在...

    Hibernate Annotation 共享主键一对一双向关联

    在Java的持久化框架中,Hibernate是一个非常常用且强大的ORM(对象关系映射)工具,它使得开发者可以方便地将数据库操作转化为面向对象的方式。在实际的项目开发中,我们经常遇到各种各样的关联关系,比如一对一、一...

    Hibernate关联关系的CRUD和集合映射(annotation)

    3. **@ManyToOne**:在多对一关系中,子实体通常会包含一个引用父实体的属性,这个属性上需要添加`@ManyToOne`注解。 4. **@ManyToMany(cascade=CascadeType.ALL)**:配置多对多关系,`cascade`属性可控制级联操作...

    S2SH整合基于annotation

    **Hibernate3** 是一个对象关系映射(ORM)框架,它允许开发者使用面向对象的方式来操作数据库。在Hibernate中,实体类和数据库表之间建立映射,而Annotation则可以用于定义这些映射,例如`@Entity`表示一个数据库表...

    详解Hibernate一对一映射配置

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

    Hibernate Annotation 唯一外键一对一双向关联

    在一对一关系中,两个实体之间通常会有一个共享的唯一标识,即一个实体的主键同时作为另一个实体的外键。 `@OneToOne`注解在Hibernate中用于定义一对一的关系,可以是单向或双向的。单向关联意味着在一个实体类中...

    基于Annotation的MVC框架SSH示例.rar

    在这个"基于Annotation的MVC框架SSH示例"中,我们将探讨如何使用注解(Annotation)来简化SSH框架的配置和实现。 1. **Spring框架**:Spring是核心容器,负责管理应用对象的生命周期和依赖注入。在传统的Spring配置...

    基于Annotation的Java单元测试框架.pdf

    本文主要介绍了基于Annotation的Java单元测试框架,讨论了Annotation在Java EE中的应用、反射技术的使用和JUnit单元测试框架的结合,建立了一个自动化单元测试框架结构。 一、Annotation概述 Annotation是Java 5中...

    基于annotation s2sh实现零配置的CRM

    综上所述,基于Annotation的S2SH实现零配置CRM是一种现代化的开发方式,它降低了开发复杂性,提高了开发效率,同时保持了系统的可扩展性和可维护性。在Java Web开发中,理解并熟练运用这一技术是非常重要的。

    精通Java Web整合开发(第2版)

    第12章 基于annotation注解技术的ssh 2整合开发 12.1 初识annotation522 12.2 亲身体验annotation的威力524 12.3 struts 2.x的annotation插件convention-plugin528 12.4 hibernate 3.x的annotation解决之道532 ...

    基于Annotation的s2sh整合配置实现分页功能

    基于Annotation的s2sh整合配置实现分页功能基于Annotation的s2sh整合配置实现分页功能基于Annotation的s2sh整合配置实现分页功能基于Annotation的s2sh整合配置实现分页功能基于Annotation的s2sh整合配置实现分页功能

    详解 Spring 3.0 基于 Annotation 的依赖注入实现

    在 Spring 框架中,依赖注入(Dependency Injection,简称 DI)是一种重要的设计模式,它允许对象之间的依赖关系在运行时动态地注入,从而降低了组件之间的耦合度。Spring 3.0 开始引入了基于 Annotation 的依赖注入...

    基于Annotation并对DAO层封装具有分页功能的S2SH整合实例

    在这个基于Annotation并对DAO层封装具有分页功能的S2SH整合实例中,我们将探讨如何利用这些技术的特性来提高开发效率和代码可维护性。 首先,让我们深入了解一下Struts2。Struts2是基于MVC模式的开源Web应用框架,...

    Hibernate继承映射(annotation)

    - 要注意处理多对一或一对多的关系,因为这些关系可能需要额外的外键约束。 综上所述,Hibernate的单表继承映射是实现对象模型与数据库模型映射的一种有效方法。它简化了数据库设计,但需要根据具体项目需求权衡...

Global site tag (gtag.js) - Google Analytics