JPA中的一对一双向关联(二)
IDCard.java
- package?junit.test; ????import?javax.persistence.EntityManager; ??import?javax.persistence.EntityManagerFactory; ??import?javax.persistence.Persistence; ????import?org.junit.BeforeClass; ??import?org.junit.Test; ????import?cn.itcast.bean.IDCard; ??import?cn.itcast.bean.Person; ????public?class?OneToOneTest?{ ????????@BeforeClass??????public?static?void?setUpBeforeClass()?throws?Exception?{ ??????} ????????@Test??????public?void?save()?{ ??????????EntityManagerFactory?factory?=?Persistence ??????????????????.createEntityManagerFactory("itcast"); ??????????EntityManager?em?=?factory.createEntityManager(); ??????????em.getTransaction().begin(); ????????????Person?person?=?new?Person("小叶");???//?person是关系维护端。 ??????????person.setIdCard(new?IDCard("19881210"));????//?通过person把idCard放进去,这关系就由person来维护了。 ??????????em.persist(person);?//?先保存idCard,得到保存记录的id,用id作为外键的值,再保存person。因为person表里的外键值是idcard表里面的主键,只有先生成主键值才有外键值。 ????????????em.getTransaction().commit(); ??????????em.close(); ??????????factory.close(); ??????} ????}??
?
?? 谁是关系维护端,谁就负责外键字段的更新。
?? Person是关系维护端,IDCard是关系被维护端,怎么维护更新呢?往Person里面设置idCard,这样就相当于把关系建立起来了;如果通过IDCard设置person的话,那么这种关系是建立不起来的,因为IDCard是关系被维护端