我有一个非常有线的问题。
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 on,assertNotNull 将失败。但是如果@Transactional 评论会成功。
我调试更多信息。只是想知道 Hibernate 上的 @Transactional 何时不会为
orderService.findOrder(randomOrder.getId());
另外,我尝试切换到 elcpseLink 作为 JPA 提供程序。事情变得更糟,当 @Transactional 评论时, orderService.findOrder(randomOrder.getId()) 将返回一个空列表(不是 null,大小为 0)。
有什么建议吗?非常感谢!