共同主键的 1对 1 one to one
**@PrimaryKeyJoinColumn
关系维护端的主键作为外键指向关系被维护端的主键,不在新建一个外键列
这个注解只能写在主(生成ID)的一端**
/**
* AnnotationPerson generated by hbm2java
*
* 主键生成策略 ,uuid
* @Id
@GenericGenerator(name = "generator", strategy = "uuid")
@GeneratedValue(generator = "generator", strategy = GenerationType.TABLE)
@Column(name="id",length=32)
*
* one to one 指定
* @OneToOne(cascade=CascadeType.ALL)
* @PrimaryKeyJoinColumn//这个注解只能写在主(生成ID)的一端
* private AnnotationCard annotationCard;
*
*/
@Entity
@Table(name = "annotation_person")
public class AnnotationPerson implements java.io.Serializable {
/**
*
*
*
*/
private static final long serialVersionUID = 1709729014963568459L;
@Id
@GenericGenerator(name = "generator", strategy = "uuid")
@GeneratedValue(generator = "generator", strategy = GenerationType.TABLE)
@Column(name="id",length=32)
private String id;
@Column(name = "name", length = 50)
private String name;
@OneToOne(cascade=CascadeType.ALL)
@PrimaryKeyJoinColumn//这个注解只能写在主(生成ID)的一端
private AnnotationCard annotationCard;
get set 略
/**
* AnnotationCard generated by hbm2java
* @Id
* @GenericGenerator(name ="pkGenerator",strategy="foreign" ,parameters={@Parameter(name="property",value="annotationPerson")})
* @GeneratedValue(generator="pkGenerator")
* //id生成策略, 指定使用外键来代替主键
*
*
*接收外键 mappedBy="annotationCard" 指定的是在person 中的属性annotationCard 就是 对方身上的自己
* @OneToOne(cascade=CascadeType.ALL, mappedBy="annotationCard")
* private AnnotationPerson annotationPerson;
*
*/
@Entity
@Table(name = "annotation_card")
public class AnnotationCard implements java.io.Serializable {
/**
*
*/
private static final long serialVersionUID = 7071030204041048353L;
@Id
@GenericGenerator(name ="pkGenerator",strategy="foreign" ,parameters={@Parameter(name="property",value="annotationPerson")})
@GeneratedValue(generator="pkGenerator")
//id生成策略, 指定使用外键来代替主键
private String id;
@Column(name = "mark", length = 50)
private String mark;
@OneToOne(cascade=CascadeType.ALL, mappedBy="annotationCard")
private AnnotationPerson annotationPerson;
get set 略
运行的效果
person card 两张表的主键通用 ,加上 @OneToOne(cascade=CascadeType.ALL, mappedBy="annotationCard")
使其联动, 删除一个,两个都会消失
但是, 两张表只是主键相同, 并没有外键约束, 所以,还是可以在数据库中只删除一张表的数据