OneToOne双向是在One2One单向基础上修改
1、IDCard不变
IDC实体类
package com.chb.model;
public class IDCard {
private int id;
private String no;
private Person person;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getNo() {
return no;
}
public void setNo(String no) {
this.no = no;
}
public Person getPerson() {
return person;
}
public void setPerson(Person person) {
this.person = person;
}
}
IDCard.hbm.xml
2、只需在Person类中添加IDCard对象, 在Person.hbm.xml中设置设置one-to-one关联, 设置property-ref=”person”表名有对端(IDCard)中的person对象维护关系
2.1、Person实体类
package com.chb.model;
public class Person {
private int id;
private String name;
private IDCard idCard;
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 IDCard getIdCard() {
return idCard;
}
public void setIdCard(IDCard idCard) {
this.idCard = idCard;
}
}
2.2、Person.hbm.xml
3、测试
3.1、one2one双向添加测试。
package com.chb.model;
import org.hibernate.Session;
import com.chb.hbUtils.HibernateUtils;
public class Test {
@org.junit.Test
public void test01() {
Session session = null;
//获取session
session = HibernateUtils.getSession();
//开启事务
session.beginTransaction();
//测试添加
IDCard idCard = new IDCard();
idCard.setNo("001");
session.save(idCard);
Person p = new Person();
p.setName("chb");
p.setIdCard(idCard);
session.save(p);
//提交事务
session.getTransaction().commit();
HibernateUtils.close();
}
}
3.2、测试结果:是由IDCard端的person对象维护关系。所以通过p.setIdCard(idCard)就无效, 所以没有关联关系。
Hibernate:
create table t_id_card (
c_id integer not null auto_increment,
no varchar(255),
p_id integer,
primary key (c_id)
) engine=InnoDB
Hibernate:
create table t_person (
p_id integer not null auto_increment,
p_name varchar(255),
primary key (p_id)
) engine=InnoDB
Hibernate:
alter table t_id_card
drop index UK_3dn8d7nqti422123arcwiwcni
Hibernate:
alter table t_id_card
add constraint UK_3dn8d7nqti422123arcwiwcni unique (p_id)
Hibernate:
alter table t_id_card
add constraint FKka2jsnojthq1ip58u1fqnlfwh
foreign key (p_id)
references t_person (p_id)
Hibernate:
insert
into
t_id_card
(no, p_id)
values
(?, ?)
Hibernate:
insert
into
t_person
(p_name)
values
(?)
4、先添加person, 在添加IDCard,
package com.chb.model;
import org.hibernate.Session;
import com.chb.hbUtils.HibernateUtils;
public class Test {
@org.junit.Test
public void test01() {
Session session = null;
//获取session
session = HibernateUtils.getSession();
//开启事务
session.beginTransaction();
//测试添加
//先添加person
Person p = new Person();
p.setName("wx");
session.save(p);
//再添加IDCard
IDCard idCard = new IDCard();
idCard.setNo("002");
idCard.setPerson(p);
session.save(idCard);
//提交事务
session.getTransaction().commit();
HibernateUtils.close();
}
}
结果: