@OneToOne是Hibernate中常見的表關係註解,指兩張表是一對一的關係。
可以有一對一單向,一對一雙向,同時又可以有外鍵關聯和主鍵關聯,總共4種。
用丈夫表和妻子表(想做@OneToMany的可以自己試試,括弧笑)舉個一對一雙向外鍵關聯的例子:
創建數據表,當然你也可以讓hibernate幫你生成。效果如下
CREATE TABLE `husband` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`wife_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `FK4BB1A83BA5D21E37` (`wife_id`),
CONSTRAINT `FK4BB1A83BA5D21E37` FOREIGN KEY (`wife_id`) REFERENCES `wife` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
CREATE TABLE `wife` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
創建wife,husband類,並註解。
如果在wife內的@OneToOne(mappedBy = “wife”)中不加mappedBy,你會發現運行hibernate後wife裏也會生成一個husband_id的外鍵指向husband表。
mappedBy後的wife是指husband類中的wife對象
@Entity
public class wife
{
private int id;
private String name;
private husband husband;
@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;
}
@OneToOne(mappedBy = "wife")
public husband getHusband()
{
return husband;
}
public void setHusband(husband husband)
{
this.husband = husband;
}
}
@Entity
public class husband
{
private int id;
private String name;
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;
}
@OneToOne
public wife getWife()
{
return wife;
}
public void setWife(wife wife)
{
this.wife = wife;
}
}