hibernate一对一关系(组件)映射
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;@Entitypublic class Husband {private int id;private String name;private Date birthday; private Wife wife; @Id @GeneratedValuepublic 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;@Entitypublic class Wife {private int id;private String name;private Date birthday;@Id@GeneratedValuepublic 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;@Entitypublic class Husband {private int id;private String name;private Date birthday; private Wife wife; @Id @GeneratedValuepublic 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;@Entitypublic 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@GeneratedValuepublic 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可以互相联系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; @Idpublic int getId() {return id;}public void setId(int id) {this.id = id;}@Idpublic 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;@Entitypublic 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@GeneratedValuepublic 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;@Entitypublic class Husband {private int id;private String name;private Date birthday; private Wife wife; @Idpublic 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) )??