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) )