age) {
this.age = age;
}
}
?
?
Wife类的联合主键类WifePK.java
package com.bjsxt.hibernate;
import java.io.Serializable;
public class WifePK implements Serializable {
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;
}
}
Huaband.java
package com.zgy.hibernate.model;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinColumns;
import javax.persistence.OneToOne;
@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
@JoinColumns(
{
@JoinColumn(name="wifeId",referencedColumnName="id"),
@JoinColumn(name="wifeName",referencedColumnName="name")
}
)
public Wife getWife() {
return wife;
}
public void setWife(Wife wife) {
this.wife = wife;
}
}
?
观察结果:
1.在husband.java中,只使用@OneToOne,则会在husband表中自动生成wife_id ,wife_name两个字段。show create table husband;
CREATE TABLE `husband` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`wife_id` int(11) DEFAULT NULL,
`wife_name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `FK_4565w2c4f1cj082spdiok0w6` (`wife_id`),
CONSTRAINT `FK_4565w2c4f1cj082spdiok0w6` FOREIGN KEY (`wife_id`) REFERENCES `wife` (`id`)
)
2.使用@JoinColumns(
{
@JoinColumn(name="wifeId",referencedColumnName="id"),
@JoinColumn(name="wifeName",referencedColumnName="name")
}
)
可以自定义husband表中关联联合主键的列的名称
?
?
2.加入以上Annotation之后,再观察结果show create table husband;
CREATE TABLE `husband` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`wifeId` int(11) DEFAULT NULL,
`wifeName` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `FK_sdshifqwgidsm93jdh5kfl0e4` (`wifeId`,`wifeName`),
CONSTRAINT `FK_sdshifqwgidsm93jdh5kfl0e4` FOREIGN KEY (`wifeId`, `wifeName`) REFERENCES `wife` (`id`, `name`)
)
?
第六种:组建映射
一、Annotation配置
1.不将wife.java作为实体类
2.在husband.java中,使用组件映射,关联wife.java中的wifeName和age
范例:
Wife.java中,不将wife作为是实体类
package com.zgy.hibernate.model;
import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.IdClass;
import javax.persistence.OneToOne;
import javax.persistence.PrimaryKeyJoinColumn;
public class Wife {
private String wifeName;
private int age;
public String getWifeName() {
return wifeName;
}
public void setWifeName(String wifeName) {
this.wifeName = wifeName;
}
public int getAge() {
return age;
}