SpringData - 对象导航查询

对象导航查询: 查询一个对象的时候,通过此对象查询所有的关联对象.

 

基于 一对多表操作 的文章, 新建一个测试类:

一查多(根据客户查询客户关联的所有联系人)

1. getOne(Long id) 默认为 延迟加载

@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);
    }
}

2. findOne(Long id) 默认为 立即加载

在一的一方类中配置一对多表关系映射 立即加载(fetch = FetchType.EAGER)

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

@ManyToOne(targetEntity = Customer.class, fetch = FetchType.LAZY)
@JoinColumn(name = "lkm_cust_id", referencedColumnName = "cust_id")
private Customer customer;
@Test
@Transactional // 解决在java代码中的no session问题
public void testQuery3() {
    //查询id为 1 的联系人
    LinkMan linkMan = linkManDao.findOne(1L);
    //对象导航查询所属的客户
    Customer customer = linkMan.getCustomer();
    System.out.println(customer);
}

 

*** 推荐使用 一对多 查询

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值