JPA/Hibernate don';t为FetchType.EAGER生成联接sql,而Spring@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

我有一个非常棘手的问题

JPA/Hibernate不为FetchType.EAGER生成联接sql,而Spring@Transactional已注释。但是如果我删除@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);

}
我尝试切换到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());