13、对象导航查询

对象导航查询

1、对象导航查询

​ 查询一个对象的同时,通过此对象查询他的关联对象

​ 案例:客户和联系人案例

2、测试案例

測試的模板

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:applicationContext.xml")
public class ObjectQueryTest {
    
    @Autowired
    private CustomerDao customerDao;

    @Autowired
    private LinkManDao linkManDao;
}

2.1、测试对象导航查询

//could not initialize proxy - no Session
//测试对象导航查询(查询一个对象的时候,通过此对象查询所有的关联对象)
@Test
@Transactional //解决在java代码中的no session问题
public void testQuery1(){
    //查询id为1的客户
    Customer customer = customerDao.getOne(1l);
    //对象导航串,此客户下的所有联系人
    Set<LinkMan> linkMans = customer.getLinkMans();

    for (LinkMan linkMan : linkMans){
    	System.out.println(linkMan);
    }
}

查看結果:

在这里插入图片描述

立即加载配置

/*
* 对象导航查询:
*       默认使用的是延迟加载的形式查询的
*           调用get方法并不会立即发送查询,而是在使用关联对象的时候才会查询
*       延迟加载!
* 修改配置,将延迟加载改为立即加载
*        fetch,需要配置到多表映射关系的注解上
* */
@Test
@Transactional //解决在java代码中的no session问题
public void testQuery2(){
    //查询id为1的客户
    Customer customer = customerDao.findOne(1l);
    //对象导航串,此客户下的所有联系人
    Set<LinkMan> linkMans = customer.getLinkMans();

    System.out.println(linkMans.size());
}
/*
* fetch : 配置关联对象的加载方式
*           EAGER   : 立即加载
*           LAZY    : 延迟加载
* */
@OneToMany(mappedBy = "customer",cascade = CascadeType.ALL,fetch = FetchType.EAGER)
private Set<LinkMan> linkMans = new HashSet<LinkMan>();

从联系人对象导航查询他的所属客户

/*
 * 从联系人对象导航查询他的所属客户
 *       * 默认 :立即架子啊
 * 延迟加载:
 *   fetch,需要配置到多表映射关系的注解上
 * */
@Test
@Transactional
public void testQuery3(){
    LinkMan linkMan = linkManDao.findOne(3l);
    Customer customer = linkMan.getCustomer();
    System.out.println(customer);
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值