博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【hibernate框架】一对一双向外键关联(Annotation实现)
阅读量:6714 次
发布时间:2019-06-25

本文共 2266 字,大约阅读时间需要 7 分钟。

一对一双向外键关联(Annotation方法):
一夫(Husband)一妻(Wife)的一对一双向外键关联
Husband和Wife实体类:
package cn.edu.hpu.one2one;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Id;import javax.persistence.JoinColumn;import javax.persistence.OneToOne;@Entitypublic class Husband {	private int id;	private String name;	private Wife wife;	@Id	@GeneratedValue	public int getId() {		return id;	}	public void setId(int id) {		this.id = id;	}		@OneToOne	@JoinColumn(name="wifeid")	public Wife getWife() {		return wife;	}	public void setWife(Wife wife) {		this.wife = wife;	}		public String getName() {		return name;	}	public void setName(String name) {		this.name = name;	}		}
package cn.edu.hpu.one2one;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Id;import javax.persistence.OneToOne;@Entitypublic class Wife {	private int id;	private String name;	private Husband husband;	@Id	@GeneratedValue	public int getId() {		return id;	}	public void setId(int id) {		this.id = id;	}		@OneToOne	public Husband getHusband() {		return husband;	}	public void setHusband(Husband husband) {		this.husband = husband;	}	public String getName() {		return name;	}	public void setName(String name) {		this.name = name;	}	}
生成的建表语句:
alter table Husband 
        drop 
        foreign key FKAEEA401BC6294CED
    alter table Wife 
        drop 
        foreign key FK29233185D75BEA
    drop table if exists Husband
    drop table if exists Wife
    create table Husband (
        id integer not null auto_increment,
        name varchar(255),
        wifeid integer,
        primary key (id)
    )
    create table Wife (
        id integer not null auto_increment,
        name varchar(255),
        husband_id integer,
        primary key (id)
    )
    alter table Husband 
        add index FKAEEA401BC6294CED (wifeid), 
        add constraint FKAEEA401BC6294CED 
        foreign key (wifeid) 
        references Wife (id)
    alter table Wife 
        add index FK29233185D75BEA (husband_id), 
        add constraint FK29233185D75BEA 
        foreign key (husband_id) 
        references Husband (id)
双向关联在数据库中只需一边设置外键就行了,所以wife的husband_id就可以不要
mappedBy="wife"告诉hibernate,Wife和husband之间是一个1对1的关联,
对方husband类的wife属性已经做映射了,你就不用管我生成的外键的关联了
对方那边是主导,你不用管我这边的设置
这个时候wife建表语句中就没有husband_id属性了
凡是双向关联必设mappedBy
所以wife实体类注解写成:
@OneToOne(mappedBy="wife")
public Husband getHusband() {
return husband;
}

生成的表中wife就没有husband_id字段了

转载请注明出处:

你可能感兴趣的文章
git命令行解决冲突文件步骤
查看>>
List、Map、Set三个接口,存取元素时,各有什么特点?
查看>>
js进阶 12-6 监听鼠标滚动事件和窗口改变事件怎么写
查看>>
HttpClient的基本使用
查看>>
Tomcat 7服务器线程模型
查看>>
idea设置断点,对于for循环,到指定次数时停止
查看>>
lua中面向对象(class)实现探索(一)(转)
查看>>
Model元数据定制与Model模板
查看>>
JS异常简单处理
查看>>
jvisualvm 工具使用
查看>>
《精通Python设计模式》学习行为型之责任链模式
查看>>
How to Limit NodeRunner.exe High Memory, CPU Usage
查看>>
solr7.1.0学习笔记(10)---Solr发布到Tomcat
查看>>
洛谷P1435 回文字串(dp)
查看>>
php 会话控制(关于session的维护与生命周期)
查看>>
tomcat PermGen space
查看>>
高阶函数:声明、实现(定义)与调用
查看>>
splash 安装
查看>>
mysql数据库优化课程---15、mysql优化步骤
查看>>
数据库路由中间件MyCat - 使用篇(4)
查看>>