hibernate注解实现一对一单向外键关联

首先,理解什么是一对一关系

例如人与身份证号,一个人只能有一个身份证号,而一个身份证号只能属于一个人,这种关系就叫做一对一关系。

由此,我们用人和身份证号来设置一对一单向外键关联,通过Person可以找到idCard,idCard却找不到Person。


1、创建实体类Person并添加idCard引用

package cn.yinghuo.model;

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

import org.hibernate.annotations.GenericGenerator;

/**
 * 单向外键关联
 * 主控方
 */

	@Entity
	public class Person {
		public String pid;
		public String pname;
		public IdCard idCard;

	@Id //主键
	@GeneratedValue(generator="uuid")  //指定一个生成器为uuid
	@GenericGenerator(name = "uuid", strategy ="uuid") //构建一个生成器,生成策略strategy为手工赋值
	public String getPid() {
		return pid;
	}
	public void setPid(String pid) {
		this.pid = pid;
	}
	public String getPname() {
		return pname;
	}
	public void setPname(String pname) {
		this.pname = pname;
	}
	
	@OneToOne //全级联的级联关系
	@JoinColumn(name="cid") //被控类对应的主键为cid
	public IdCard getIdCard() {
			return idCard;
		}
	public void setIdCard(IdCard idCard) {
			this.idCard = idCard;
		}
}

2、创建实体类idCard

package cn.yinghuo.model;
/**
 * 单向外键关联
 * 被控方
 */
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

import org.hibernate.annotations.GenericGenerator;

	@Entity
	public class IdCard {
		public String cid;
		public String cname;
	
	@Id // 主键
	@GeneratedValue(generator="uuid") //指定一个生成器为uuid
	@GenericGenerator(name = "uuid", strategy ="uuid") //构建一个生成器,生成策略strategy为手工赋值
	public String getCid() {
		return cid;
	}
	public void setCid(String cid) {
		this.cid = cid;
	}
	public String getCname() {
		return cname;
	}
	public void setCname(String cname) {
		this.cname = cname;
	}
	
	
}

3、创建测试类

(注意:因为测试类中用了schemaExport()方法,会自动生成数据库表不需要再重新创建)

package cn.yinghuo.action;
/**
 * 测试类
 */
import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;

public class Main {
	public static void main(String[] args) {
		schemaExport();
	}
	
	// schemaExport()生成数据库表
	// 第一个true是在控制台打印出DDL,如果是false没什么影响只是不再打印出DDL(数据库定义语言)
	// 第二个true是创建表,反之false则不创建
	public static void schemaExport() {
		new SchemaExport(new Configuration().configure()).create(true, true);
	}
}

4、在XML中引入映射文件

5、去数据库中查看(查看模型更容易看出来这种关系)

hibernate注解实现一对一单向外键关联_第1张图片

你可能感兴趣的:(hibernate框架学习)