Spring Data JPA对象导航视图
-
对象导航查询:
查询一个对象的同时,通过此对象查询他的关联对象
以前文的一对多关系为例
RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = "classpath:applicationContext.xml") public class ObjectQueryTest { @Resource private CustomerDao customerDao; @Resource private LinkManDao linkManDao; /* * 测试对象导航查询(查询一个对象的时候,查询该对象的所有关联对象) * */ @Test @Transactional public void test(){ //查询id为1的客户 Customer customer = customerDao.getOne(1); Set<LinkMan> linkMans = customer.getLinkMans(); for (LinkMan linkMan : linkMans) { System.out.println(linkMan); } } }
注意:
从一的一方查询多的一方
/* * 对象导航查询,从一的一方查询多的一方,默认使用延迟加载的形式查询 * 调用findOne方法不会立即查询关联对象,而是在get关联对象时才会查询 * */ @Test @Transactional public void test2(){ //查询id为1的客户 Customer customer = customerDao.findOne(1); //立即加载 Set<LinkMan> linkMans = customer.getLinkMans(); System.out.println(linkMans.size()); }
配置加载方式
@OneToMany(mappedBy = "customer",cascade = CascadeType.ALL,fetch = FetchType.LAZY) //EAGER:立即加载 LAZY 延迟加载 private Set<LinkMan> linkMans = new HashSet<LinkMan>();
从多的一方查询一的一方
/* * 从多的一方查询一的一方,默认使用立即加载(即查询多的方时也查询一的一方) * */ @Test @Transactional public void test3(){ LinkMan one = linkManDao.findOne(2); //对象导航查询 Customer customer = one.getCustomer(); System.out.println(customer); }