@Test public void testSave() { Boss boss = new Boss(); boss.setName("A-老板"); Company company = new Company(); company.setName("A-公司"); boss.setCompany(company); company.setBoss(boss); // //这两行代码会保存两次没有外键端的对象,基于主键映射。所以在保存时,要么先保存没有外键的一端,要么只保存有外键的一端。 oneToOnePrimaryService.saveBoss(boss); // oneToOnePrimaryService.saveCompany(company); } @Test public void testGet() { //有外键的一端默认使用懒加载。 // Boss boss = oneToOnePrimaryService.getBoss(1); // System.out.println(boss.getCompany().getClass().getName()); // //没有外键的一端不使用懒加载,而是直接将它引用的对象使用左外连接一并查询出来。 Company company = oneToOnePrimaryService.getCompany(1); System.out.println(company.getBoss().getClass().getName()); } @Test public void testUpdate() { //没有外键列不仅有外键约束还有唯一约束,即没有外键列一端的对象不能被有外键列一端的两个对象同时指向。这样才能够实现一对一。 Company company = oneToOnePrimaryService.getCompany(2); Boss boss = oneToOnePrimaryService.getBoss(1); boss.setCompany(company); //没有抛异常,但是没有更新成功 oneToOnePrimaryService.updateBoss(boss); } @Test public void testDelete() { //基于主键映射的方式支持级联保存,但不支持级联删除。 //再删除时不能先删除没有外键的一端,因为它的主键被引用。 Boss boss = oneToOnePrimaryService.getBoss(4); Company company = oneToOnePrimaryService.getCompany(4); // oneToOnePrimaryService.deleteCompany(company); oneToOnePrimaryService.deleteBoss(boss); }