Hibernate 关系映射 ——单向一对一

关于关系的一些基本知识点,请查看总结篇:Hibernate 关系映射

由于单向一对一的主键关联很少使用,不再示例,下面实例为单向一对一外键关联。

Annotation方式:

对象模型:一Husband 对一 wife ,且此时Husband为主导方

只需要在主导方(Husband)使用   @One2One  @JoinColumn

         @JoinColumn(name="wifeId")表示,在husband表中有一外键wifeid


import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;

@Entity
public class Husband {
	private int id;
	private String name;
	private Wife wife;
	
	@Id
	@GeneratedValue
	public int getId() { return id;	}
	public String getName() {		return name;	}
	
	@OneToOne
	@JoinColumn(name="wifeId")
	public Wife getWife() {		return wife;	}
	public void setId(int id) {		this.id = id;	}
	public void setName(String name) {		this.name = name;	}
	public void setWife(Wife wife) {		this.wife = wife;	}
}

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
public class Wife {
	private int id;
	private String name;
	
	@Id
	@GeneratedValue
	public int getId() {		return id;	}
	public String getName() {		return name;	}
	public void setId(int id) {		this.id = id;	}
	public void setName(String name) {		this.name = name;	}	
}

xml方式:

学生(主导方)和学生证一对一关系,只需在StudentCard.hbm.xml(即被主导方的表)中添加<many-to-one></many-to-one>

public class Student {
	private int id;
	private int age;
	private String name;
	
	public int getId() {		
             return id;
	}
	public void setId(int id) {
		this.id = id;	
        }	
	public int getAge() {
		return age;	
        }
	public void setAge(int age) {
		this.age = age;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {	
	        this.name = name;
	}
	public void setStudentCard(StudentCard studentCard) {
		this.studentCard = studentCard;
	}
	public StudentCard getStudentCard() {
                return studentCard;
	}
}

public class StudentCard {
	private int id;
	private String name;
	private Student student;
	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 Student getStudent() {		return student;	}
	public void setStudent(Student student) {		this.student = student;	}
	
}

下面配置xml文件:

student.hbm.xml:

<hibernate-mapping>
        <class name="com.zyh.hibernate.Student" table="student">
        <id name="id" column="id">
        	<generator class="native"></generator>
        </id> 
        <property name="name" column="name" />
        <property name="age" column="age" />
     </class>	
</hibernate-mapping>

StudentCard.hbm.xml:     

<hibernate-mapping>
   <class name="com.zyh.hibernate.StudentCard" table="studentcard">
         <id name="id">
                 <generator class="native"></generator>
          </id>
         <property name="name"></property>
        <many-to-one name="student" column="stuid" unique="true"></many-to-one> 
</class>
</hibernate-mapping>

column属性是指数据库表中外键名称

unique="true"是保证生成的字段唯一,这样<many-to-one>也达到了一对一的效果


特别说明:

      一对一单向外键关联与一对一双向外键关联在数据库的表的格式是一样的区别在于程序中双向外键关联可通过Hibernate在两个类间互相调用彼此而单向外键关联只能单方向调用.


查看其它关系映射:Hibernate 关系映射




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值