JPA/Hibernate don';t为FetchType.EAGER生成联接sql,而Spring@Transactional注释
我有一个非常棘手的问题 JPA/Hibernate不为FetchType.EAGER生成联接sql,而Spring@Transactional已注释。但是如果我删除@Transactional。一切都很好 代码如下:JPA/Hibernate don';t为FetchType.EAGER生成联接sql,而Spring@Transactional注释,spring,hibernate,jpa,transactional,Spring,Hibernate,Jpa,Transactional,我有一个非常棘手的问题 JPA/Hibernate不为FetchType.EAGER生成联接sql,而Spring@Transactional已注释。但是如果我删除@Transactional。一切都很好 代码如下: public class Item { @ManyToOne private Order order; } public class Order { @OneToMany(mappedBy = "item", fetch = FetchType.EA
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);
}
我尝试切换到ElicSpelink作为JPA提供商。更糟糕的是,当@Transactional注释时,orderService.findOrder(randomOrder.getId())将返回一个空列表(非空,大小为0)
有什么建议吗?非常感谢 我无法对Hibernate中的连接进行评论,除非您应该在查询中指定fetch join,以便可移植到其他JPA提供程序。特别是EclipseLink,在没有JPA设置或本机查询提示或@JoinFetch注释的情况下,不会加入急切的关系 至于日食上的收藏是空的。这是因为您只设置了关系的一面。JPA要求您设置双向关系的两侧,以便它们与数据库中的内容保持一致。当@Transactional被注释掉时,您将返回相同的randomOrder实例,该实例在持久化时具有空的items集合
尝试调用randomOrder.addItems(randomItem);和randomItem.setOrder(randomOrder);在orderService.saveOrder(随机订单)之前;打电话 1代码在Hibernate和eclipseLink中得到相同的结果。我知道,如果我建立双向关系,它会起作用。
orderService.findOrder(randomOrder.getId());