Hibernate关系一般分成这么几种情况:一对一单向,一对一双向,一对多单向,多对一单向,一对多双向,多对一双向,多对多单向,多对多双向。
1:一对一单向
@Entity
public class Husband {
private int id;
private String name;
private Wife wife;
@Id
@GeneratedValue
public int getId() {
return id;
}
public String getName() {
return name;
}
@OneToOne
@JoinColumn(name="wife")//定义字段名称..
public Wife getWife() {
return wife;
}
public void setId(int id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setWife(Wife wife) {
this.wife = wife;
}
}
public class Wife {
private int id;
private String name;
@Id
@GeneratedValue
public int getId() {
return id;
}
public String getName() {
return name;
}
public void setId(int id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
}
create table Husband (id integer not null auto_increment, name varchar(255), wife integer, primary key (id)) create table Wife (id integer not null auto_increment, name varchar(255), primary key (id)) alter table Husband add index FKAEEA401BAECA6750 (wife), add constraint FKAEEA401BAECA6750 foreign key(wife) references Wife (id)
2:一对一双向
public class Husband {
private int id;
private String name;
private Wife wife;
@Id
@GeneratedValue
public int getId() {
return id;
}
public String getName() {
return name;
}
@OneToOne
@JoinColumn(name="wife")//定义字段名称..
public Wife getWife() {
return wife;
}
public void setId(int id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setWife(Wife wife) {
this.wife = wife;
}
}
public class Wife {
private int id;
private String name;
private Husband husband;
@OneToOne(mappedBy="wife")
//双向外键关联需要设置mappedBy,否则会有冗余
//其中"wife"为Husband的get方法中的wife,还不是那个wife字段。
public Husband getHusband() {
return husband;
}
public void setHusband(Husband husband) {
this.husband = husband;
}
@Id
@GeneratedValue
public int getId() {
return id;
}
public String getName() {
return name;
}
public void setId(int id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
}
不要忘了mappedBy,否则会生成两个外键关联。
其实单向和双向生成的表没什么区别,区别只是单向的时候只能由一方获得另外一方,而双向则是每一方都能获得对方。
create table Husband (id integer not null auto_increment, name varchar(255), wife integer, primary key (id)) create table Wife (id integer not null auto_increment, name varchar(255), primary key (id)) alter table Husband add index FKAEEA401BAECA6750 (wife), add constraint FKAEEA401BAECA6750 foreign key (wife) references Wife (id)
3:多对一
@Entity
@Table(name="t_group")
public class Group {
private int id;
private String name;
@Id
@GeneratedValue
@Column(name="group_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;
}
}
@Table(name="t_user")
public class User {
private int id;
private String name;
private Group group;
@ManyToOne
@JoinColumn(name="id_group")
public Group getGroup() {
return group;
}
@Id
@GeneratedValue
public int getId() {
return id;
}
public String getName() {
return name;
}
public void setGrou