hibernate一对一关系(组件)映射

1.一对一单向外键关联:
package yingjun.model;

import java.util.Date;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
@Entity
public class Husband {
	private int id;
	private String name;
	private Date birthday;
    private Wife wife;
    
    @Id
    @GeneratedValue
	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;
	}
	@Temporal(TemporalType.DATE) //改变为yyyy-mm-dd(默认为yyyy-mm-dd hh:mm:ss)
	public Date getBirthday() {
		return birthday;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
	@OneToOne         //设定对应关系
	@JoinColumn(name="wifeid")  //外键
	public Wife getWife() {
		return wife;
	}
	public void setWife(Wife wife) {
		this.wife = wife;
	}
	
}
 
package yingjun.model;

import java.util.Date;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
@Entity
public class Wife {
	private int id;
	private String name;
	private Date birthday;
	@Id
	@GeneratedValue
	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;
	}
	@Temporal(TemporalType.DATE) 
	public Date getBirthday() {
		return birthday;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
	
}
create table Husband (
        id integer not null auto_increment,
        birthday date,
        name varchar(255),
        wifeid integer,
        primary key (id)
    )

    create table Wife (
        id integer not null auto_increment,
        birthday date,
        name varchar(255),
        primary key (id)
    )

    alter table Husband 
        add index FKAEEA401BF57AD616 (wifeid), 
        add constraint FKAEEA401BF57AD616 
        foreign key (wifeid) 
        references Wife (id)
 2 .一对一双向外键关联:
package yingjun.model;

import java.util.Date;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
@Entity
public class Husband {
	private int id;
	private String name;
	private Date birthday;
    private Wife wife;
    
    @Id
    @GeneratedValue
	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;
	}
	@Temporal(TemporalType.DATE) //改变为yyyy-mm-dd(默认为yyyy-mm-dd hh:mm:ss)
	public Date getBirthday() {
		return birthday;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
	@OneToOne         //设定对应关系
	@JoinColumn(name="wifeid")  //外键
	public Wife getWife() {
		return wife;
	}
	public void setWife(Wife wife) {
		this.wife = wife;
	}
	
}
 
package yingjun.model;

import java.util.Date;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
@Entity
public class Wife {
	private int id;
	private String name;
	private Date birthday;
	private Husband hudband;
	
	@OneToOne(mappedBy="wife")//告诉已经建立关联,不用建立冗余外键
	public Husband getHudband() {
		return hudband;
	}
	public void setHudband(Husband hudband) {
		this.hudband = hudband;
	}
	@Id
	@GeneratedValue
	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;
	}
	@Temporal(TemporalType.DATE) 
	public Date getBirthday() {
		return birthday;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}

	
}

 生成的建表语句和一对一单项外键关联相同即在数据库的表现一样,区别在java程序里面的husband和wife可以互相联系
   3 .联合主键关联:
package yingjun.model;

import java.util.Date;

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.IdClass;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
@Entity

@IdClass(HusbandPK.class) //指定联合主键
public class Husband {
	private int id;
	private String name;
	private Date birthday;
   
    
    @Id
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	@Id
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	@Temporal(TemporalType.DATE) //改变为yyyy-mm-dd(默认为yyyy-mm-dd hh:mm:ss)
	public Date getBirthday() {
		return birthday;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
	
	
}
 
package yingjun.model;

import java.util.Date;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinColumns;
import javax.persistence.OneToOne;
import javax.persistence.PrimaryKeyJoinColumn;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
@Entity
public class Wife {
	private int id;
	private String name;
	private Date birthday;
	private Husband hudband;
	
	@OneToOne
	@JoinColumns({
		                 @JoinColumn(name="husbandid",referencedColumnName="id"),
		                 @JoinColumn(name="husbandname",referencedColumnName="name") 
		          })
	public Husband getHudband() {
		return hudband;
	}
	public void setHudband(Husband hudband) {
		this.hudband = hudband;
	}
	@Id
	@GeneratedValue
	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;
	}
	@Temporal(TemporalType.DATE) 
	public Date getBirthday() {
		return birthday;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}

	
}
 
package yingjun.model;

public class HusbandPK {
	private int id;
	private String name;
	
	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;
	}
}
 
 create table Husband (
        id integer not null,
        name varchar(255) not null,
        birthday date,
        primary key (id, name)
    )

    create table Wife (
        id integer not null auto_increment,
        birthday date,
        name varchar(255),
        husbandid integer,
        husbandname varchar(255),
        primary key (id)
    )

    alter table Wife 
        add index FK292331E40F5A5E (husbandid, husbandname), 
        add constraint FK292331E40F5A5E 
        foreign key (husbandid, husbandname) 
        references Husband (id, name)
  3 .组件映射
package yingjun.model;

import java.util.Date;

import javax.persistence.Embedded;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.IdClass;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
@Entity
public class Husband {
	private int id;
	private String name;
	private Date birthday;
    private Wife wife;
    @Id
	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;
	}
	@Temporal(TemporalType.DATE) //改变为yyyy-mm-dd(默认为yyyy-mm-dd hh:mm:ss)
	public Date getBirthday() {
		return birthday;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
	@Embedded  //将wife的内容嵌入进来作为自己的一部分
	public Wife getWife() {
		return wife;
	}
	public void setWife(Wife wife) {
		this.wife = wife;
	}
	
	
}
 
package yingjun.model;

import java.util.Date;
public class Wife {
	
	private String wifename;
	private Date wifebirthday;


	
	public void setWifebirthday(Date wifebirthday) {
		this.wifebirthday = wifebirthday;
	}
	public Date getWifebirthday() {
		return wifebirthday;
	}
	public void setWifename(String wifename) {
		this.wifename = wifename;
	}
	public String getWifename() {
		return wifename;
	}
	
}
 
create table Husband (
        id integer not null,
        birthday date,
        name varchar(255),
        wifebirthday datetime,
        wifename varchar(255),
        primary key (id)
    )
 
 

猜你喜欢

转载自wosyingjun.iteye.com/blog/1833136