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