一对一双向映射
例子是一个husband对应一个wife
@Entity
public class Husband {
private int id;
private String name;
private Wife wife; //wife
@Id
@GeneratedValue
public int getId() {
return id;
}
@OneToOne(cascade=CascadeType.ALL) //
@JoinColumn(name="w_id")//默认是wife_id
public Wife getWife() {
return wife;
}
//省略其它
}
@Entity
public class Wife {
private int id;
private String name;
private Husband husband;
@Id
@GeneratedValue
public int getId() {
return id;
}
@OneToOne(mappedBy="wife")
public Husband getHusband() {
return husband;
}
//省略其它
}
双向关系中要设置mappedBy(在少的那方) 不然会产生多余的字段和约束
一对一 双向映射这种形式也可以设计成组件:
/**
* @author blog.youkuaiyun.com/ljfbest
* 组件映射:
* 对象关系:一个对象是另一个对象的一部分
* 数据库表:一张表
* annotation:@Embbedable @Embbeded
* xml:<component
*
* 以下例子:wife是husband的一部分
*/
@Embedded //这点
public Wife getWife() {
return wife;
}
wife类:public class Wife {
private String name; //此处name 不能和husband中的一致
@Column(name="wife_name")
public String getName() {
return name;
}
//省略
}
在多对多中需要设置中间表:
@ManyToMany
// 下面这个注解是用来定义中间表的表名,及字段名-------------------
@JoinTable(name="t_s",
joinColumns={@JoinColumn(name="t_id")},
inverseJoinColumns={@JoinColumn(name="s_id")}
)
public Set<Student> getStudent() {
return student;
}
多对一是 @ManyToOne