Hibernate 基于主键的一对一关联关系随手记

@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);
        
    }
原文地址:https://www.cnblogs.com/GooPolaris/p/7919639.html