`
lym6520
  • 浏览: 705832 次
  • 性别: Icon_minigender_1
  • 来自: 福建
社区版块
存档分类
最新评论

实体关系之@OneToOne

阅读更多
Person.java
package com.entity;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

/**
 * 关系维护端Person.java
 */
@Entity
@Table(name = "Person")
public class Person implements Serializable {
	
	private Integer personid;//人员ID
	private String name;// 姓名
	private boolean sex;//性别
	private Short age;//年龄
	private Date birthday;//生日
	private IDCard idcard;//身份证号码

	@Id
	@GeneratedValue
	public Integer getPersonid() {
		return personid;
	}

	public void setPersonid(Integer personid) {
		this.personid = personid;
	}

	@Column(name = "PersonName", nullable = false, length = 32)
	public String getName() {
		return name;
	}

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

	@Column(nullable = false)
	public boolean getSex() {
		return sex;
	}

	public void setSex(boolean sex) {
		this.sex = sex;
	}

	@Column(nullable = false)
	public Short getAge() {
		return age;
	}

	public void setAge(Short age) {
		this.age = age;
	}	
	/*
	 * @Temporal主要是用来指明java.util.Date 或 java.util.Calendar 类型的属性具体与数据库(date,time,timestamp)三个类型中的那一个进行映射
	 */
	@Temporal(value = TemporalType.DATE)
	public Date getBirthday() {
		return birthday;
	}

	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
	
	/*
	 * @OneToOne注释指明Person 与IDCard为一对一关系,@OneToOne注释五个属性:targetEntity、cascade、fetch、optional 和mappedBy,
	 *fetch属性默认值是FetchType.EAGER。optional = true设置idcard属性可以为null,也就是允讦没有身份证,未成年人就是没有身份证的。
	 *
	 *targetEntity属性:Class类型的属性。定义关系类的类型,默认是该成员属性对应的类类型,所以通常不需要提供定义。
	 *cascade属性:CascadeType[]类型。该属性定义类和类之间的级联关系。定义的级联关系将被容器视为对当前类对象及其关联类对象采取相同的操作,
	 *而且这种关系是递归调用的。cascade的值只能从CascadeType.PERSIST(级联新建)、CascadeType.REMOVE(级联删除)、
	 *CascadeType.REFRESH(级联刷新)、CascadeType.MERGE(级联更新)中选择一个或多个。还有一个选择是使用CascadeType.ALL,表示选择全部四项。
	 *
	 *fetch属性:FetchType类型的属性。可选择项包括:FetchType.EAGER 和FetchType.LAZY。
	 *FetchType.EAGER表示关系类(本例是OrderItem类)在主类加载的时候同时加载,FetchType.LAZY表示关系类在被访问时才加载。默认值是FetchType.LAZY。
	 *
	 *@OrderBy(value = "id ASC")注释指明加载元组时按id的升序排序(降序 "DESC")
	 */
	@OneToOne(optional = true, cascade = CascadeType.ALL, mappedBy = "person")
	public IDCard getIdcard() {
		return idcard;
	}
	
	public void setIdcard(IDCard idcard) {
		this.idcard = idcard;
	}
}



IDCard.java
package com.entity;

import java.io.Serializable;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.Table;

@Entity
@Table(name = "IDCard")
public class IDCard implements Serializable {
	
	private Integer id;//流水号
	private String cardno;//身份证号码
	private Person person;//对应的人

	public IDCard() {
	}

	public IDCard(String cardno) {
		this.cardno = cardno;
	}

	@Id
	@GeneratedValue
	public Integer getId() {
		return id;
	}

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

	@Column(nullable = false, length = 18, unique = true)
	public String getCardno() {
		return cardno;
	}

	public void setCardno(String cardno) {
		this.cardno = cardno;
	}
	
	/**
	 * @OneToOne注释指明IDCard与Person为一对一关系,IDCard是关系被维护端,optional = false设置person属性值不能为null,也就是身份证必须有对应的主人。
	 * @JoinColumn(name = "Person_ID", referencedColumnName ="personid",unique = true)指明IDCard对应表的Person_ID列作为外键与
	 * Person对应表的personid列进行关联,unique= true 指明Person_ID 列的值不可重复。
	 * @return
	 */
	@OneToOne(optional = false, cascade = CascadeType.REFRESH)
	@JoinColumn(name = "Person_ID", referencedColumnName = "personid", unique = true)
	public Person getPerson() {
		return person;
	}

	public void setPerson(Person person) {
		this.person = person;
	}
}
6
0
分享到:
评论
2 楼 lym6520 2009-04-17  
@OneToOne id对应id的关联
1 楼 lym6520 2009-01-09  
@OneToOne
 @OneToOne注释指明Person 与IDCard为一对一关系,@OneToOne注释五个属性:targetEntity、cascade、fetch、optional 和mappedBy,
 optional = true设置idcard属性可以为null,也就是允讦没有身份证,未成年人就是没有身份证的。
 targetEntity属性:Class类型的属性。定义关系类的类型,默认是该成员属性对应的类类型,所以通常不需要提供定义。
 cascade属性:CascadeType[]类型。该属性定义类和类之间的级联关系。定义的级联关系将被容器视为对当前类对象及其关联类对象采取相同的操作,而且这种关系是递归调用的。cascade的值只能从CascadeType.PERSIST(级联新建)、CascadeType.REMOVE(级联删除)、CascadeType.REFRESH(级联刷新)、CascadeType.MERGE(级联更新)中选择一个或多个。还有一个选择是使用CascadeType.ALL,表示选择全部四项。
 fetch属性:FetchType类型的属性。可选择项包括:FetchType.EAGER 和FetchType.LAZY。FetchType.EAGER表示关系类(本例是OrderItem类)在主类加载的时候同时加载,FetchType.LAZY表示关系类在被访问时才加载。默认值是FetchType.LAZY。
 @OrderBy(value = "id ASC")注释指明加载元组时按id的升序排序(降序 "DESC")
Person.class
@OneToOne(optional = true, cascade = CascadeType.ALL, mappedBy = "person")
public IDCard getIdcard() {
return idcard;
}
public void setIdcard(IDCard idcard) {
this.idcard = idcard;
}

 @OneToOne注释指明IDCard与Person为一对一关系,IDCard是关系被维护端,
 optional = false设置person属性值不能为null,也就是身份证必须有对应的主人。
 @JoinColumn(name = "Person_ID", referencedColumnName ="personid",unique = true)指明IDCard对应表的Person_ID列作为外键与Person对应表的personid列进行关联.
 unique= true 指明Person_ID 列的值不可重复。
IDCard.class
@OneToOne(optional = false, cascade = CascadeType.REFRESH)
@JoinColumn(name = "Person_ID", referencedColumnName = "personid", unique = true)
public Person getPerson() {
return person;
}
public void setPerson(Person person) {
this.person = person;
}

相关推荐

    Hibernate关联映射-one to one单向外键关联

    在Java世界中,ORM(对象关系映射)框架如Hibernate极大地简化了数据库操作。本话题主要探讨的是Hibernate中的一种关联映射方式——一对一(One-to-One)单向外键关联。这种关联模式通常用于两个实体之间存在唯一...

    hibernate 关联映射(二) one to one(单向)

    本篇文章将深入探讨Hibernate中的关联映射,特别是One-to-One(一对一)关联,这是一种表示两个实体之间一对一关系的映射方式。我们将通过源码分析和实际例子来理解其工作原理。 ### 一、One-to-One关联概述 在...

    Hibernate one to one 实例

    在Java的持久化框架Hibernate中,一对一(One-to-One)关联是一种常见的关系映射方式,它表示两个实体之间存在唯一的对应关系。这种关系通常出现在两个实体之间具有唯一性的关联,例如一个人与他的护照,或者一个...

    Hibernate one to one详细配置

    在Java的持久化框架Hibernate中,一对一(One-to-One)关联映射是常见的关系映射类型之一。它用于表示两个实体之间一对一的关联关系,即一个实体对应另一个实体的唯一实例。下面将详细介绍Hibernate中如何进行一对一...

    JPA学习总结(二)--JPAOneToOne双向关联

    本文主要探讨的是JPA中的`@OneToOne`注解,它用于建立两个实体之间的一对一关联关系。在实际开发中,这种关联关系常常出现在需要精确映射一对一实体映射的情况,例如用户与个人信息、车辆与车牌号等。我们将会深入...

    hibernate one to one 映射到两种方式

    2. 在实体类B中,不再需要`@OneToOne`注解,因为关系已经在A中定义: ```java @Entity public class B { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; } ``` `@MapsId`注解告诉...

    hibernate对象三状态及OneToOne&OneToMany&ManyToMany

    本篇将详细阐述Hibernate中的对象三状态、一对一(OneToOne)、一对多(OneToMany)以及多对多(ManyToMany)关系映射。 一、Hibernate对象三状态 1. 游离态(Detached):对象在应用程序中创建,但尚未与Session...

    hibernate一对一的关系

    在单向一对一关系中,`@OneToOne`注解用于指定与另一个实体的关联。它可以放在属性上,例如: ```java @Entity public class User { @Id private Long id; @OneToOne private Profile profile; } ``` 在双向...

    hibernate 关系注解

    双向一对一关系需要在两个实体类中都使用`@OneToOne`,一方使用`mappedBy`属性引用另一方的属性。例如: ```java // 在User类中 @OneToOne(mappedBy="user") private Profile profile; // 在Profile类中 @...

    Hibernate实体映射

    本文将深入探讨Hibernate中实体映射的一对一关联关系的两种实现方式:共享主键方式和唯一外键方式。 首先,我们要理解什么是实体映射。在Hibernate中,实体映射是将Java类与数据库表之间的关系进行描述,使得我们...

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

    在Java的持久化框架Hibernate中,`@OneToOne`注解用于表示一对一的关联关系,而唯一外键一对一双向关联则是这种关系的一种具体实现方式。这篇文章将深入探讨这一概念,帮助你理解如何在实际开发中应用。 首先,我们...

    hibernate one to one一对一关系示例

    这种关联关系意味着一个实体最多只能与另一个实体的实例进行关联,反之亦然。本示例将深入讲解如何在Hibernate中实现一对一的关联,并提供数据库备份文件作为实践基础。 首先,一对一关联可以通过在实体类中使用`@...

    JPA_3_一对一关联关系源码

    在JPA中,一对一(OneToOne)关联关系是表示两个实体之间一对一的映射关系,即一个实体对应数据库表中的另一条唯一记录。这里我们将深入探讨JPA中的一对一关联关系,并通过源码解析来理解其工作原理。 **1. JPA 一...

    Hibernate双向一对一关联映射(注解版)

    `@OneToOne`用于声明一对一的关系,而`@JoinColumn`用于定义外键字段,它指定了哪一端的实体在数据库表中拥有外键。 假设我们有两个实体,一个是`Person`,另一个是`Profile`,它们之间存在一对一的关联。在`Person...

    hibernate 一对一 多对多的关系

    在数据库设计中,一对一关系意味着两个实体之间存在着一对一的对应关系,即一个实体只能与另一个实体的一个实例关联。在Hibernate中,实现一对一关系通常有两种方式:使用主键外键和使用唯一外键。通过`@OneToOne`...

    JPA 一对一实例配置

    本篇文章将聚焦于JPA中的一对一(OneToOne)关联映射的实例配置,这在处理两个实体之间一对一关系时非常有用。 在一对一关联中,一个实体对应另一个实体的唯一实例。这种关系可以通过在实体类中定义注解来实现。JPA...

    jpa的实体映射关系7种

    这种关系中,一个实体可以有多个其他实体与之关联,但被关联的实体并不知道这个关系。通过`@OneToMany`注解来表示,可使用`mappedBy`属性定义关联的集合属性。 4. **双向一对多**: 双向一对多关系中,一方实体...

    Hibernate 一对一关联映射(主键关联VS唯一外键关联)

    主键关联是通过让两个实体的主键字段共享同一个值来建立一对一的关系。在Hibernate中,这通常通过在映射文件或注解中设置`@OneToOne`和`@PrimaryKeyJoinColumn`实现。 2. 实现方式: - XML配置:在实体类的映射...

    hibernate各种常用关联关系的基本配置

    在Java的持久化框架Hibernate中,对象关系映射(ORM)是其核心功能之一,它允许开发者用面向对象的方式处理数据库操作。关联关系是ORM中关键的概念,它模拟了现实世界中的实体之间的联系。本篇文章将深入探讨...

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

    在Java世界中,Hibernate是一个...通过使用`@OneToOne`和`@JoinColumn`注解,以及正确配置实体和数据库表,可以轻松实现这种关系。在实际开发中,应根据业务需求选择合适的关联方式,以优化数据访问性能和代码可读性。

Global site tag (gtag.js) - Google Analytics