非常に有線の問題があります。
JPA/Hiberante は、Spring @Transactional アノテーションが付けられている間、FetchType.EAGER の結合 SQL を生成しません。しかし、 @Transactional を削除すると。すべて順調。
コードは次のとおりです。
public class Item {
@ManyToOne
private Order order;
}
public class Order {
@OneToMany(mappedBy = "item", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
private List<Item> items;
}
@Test
@Transactional
public void testFetch() throws Exception {
Item randomItem = new Item();
Order randomOrder = new Order();
//OrderService and itemService is implemented by Spring Roo standard.
orderService.saveOrder(randomOrder);
randomItem.setOrder(randomOrder);
itemService.saveItem(randomItem);
Order OrderResult = orderService.findOrder(randomOrder.getId());
final List<Item> itemSearchResult = OrderResult.getItems();
Assert.assertNotNull(itemSearchResult);
}
@Transactional がオンの場合、assertNotNull は失敗します。ただし、@Transactional がコメントした場合は成功します。
より多くの情報をデバッグします。Hibernate の @Transactional が join sql を生成しない場合を調べるためだけに
orderService.findOrder(randomOrder.getId());
また、JPAプロバイダーとしてelicpseLinkに切り替えようとしています。@Transactional がコメントすると、さらに悪いことに、 orderService.findOrder(randomOrder.getId()) は空のリスト (null ではない、サイズ 0) を返します。
何かアドバイス?どうもありがとう!