读书人

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

发布时间: 2013-03-29 14:24:52 作者: rapoo

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

读书人网 >软件架构设计

热点推荐