读书人

OneToOne主键联系关系

发布时间: 2012-11-01 11:11:31 作者: rapoo

OneToOne主键关联

首先来看表的关系:

表1:

Husband

husband_id<<pk>>

name


表2

Wife

wife_id <<pk>><<fk>>
name



Husband类

@Entitypublic class Husband {@Id@GeneratedValueprivate int id;private String name;@OneToOne(cascade = CascadeType.ALL)@PrimaryKeyJoinColumnprivate Wife wife;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;}public Wife getWife() {return wife;}public void setWife(Wife wife) {this.wife = wife;}}

?

Wife类

@Entitypublic class Wife {@Id@GeneratedValue(generator = "myForeignGenerator")@org.hibernate.annotations.GenericGenerator(name = "myForeignGenerator", strategy = "foreign", parameters = @Parameter(name = "property", value = "husband"))private int id;private String name;@OneToOne(optional = false, cascade = CascadeType.ALL)@PrimaryKeyJoinColumnprivate Husband husband;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;}public Husband getHusband() {return husband;}public void setHusband(Husband husband) {this.husband = husband;}}

?

wife类中的

@Id
?@GeneratedValue(generator = "myForeignGenerator")
?@org.hibernate.annotations.GenericGenerator(name = "myForeignGenerator", strategy = "foreign", parameters = @Parameter(name = "property", value = "husband"))
?private int id;

?

定义了外键的生成策略,这样可以在级联插入时保持husband的主键和wife的外键(也是主键)相同。

?

@Testpublic void testOneToOnePK() {OneToOne.PK.Husband husband = new OneToOne.PK.Husband();OneToOne.PK.Wife wife = new OneToOne.PK.Wife();husband.setName("me");wife.setName("mywife");wife.setHusband(husband);session.beginTransaction();session.save(wife);//级联插入husband// session.save(husband);session.getTransaction().commit();}

?

?

读书人网 >软件架构设计

热点推荐