【发布时间】:2025-12-23 13:00:06
【问题描述】:
我有一个非常棘手的问题。
当 Spring @Transactional 注释时,JPA/Hiberante 不会为 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 何时不会为
生成连接 sqlorderService.findOrder(randomOrder.getId());
此外,我尝试切换到 elcpseLink 作为 JPA 提供程序。事情变得更糟,当@Transactional 评论时,orderService.findOrder(randomOrder.getId()) 将返回一个空列表(非空,大小为0)。
有什么建议吗?非常感谢!
【问题讨论】:
标签: spring hibernate jpa transactional