У меня очень зашитая проблема.
JPA / Hiberante не генерируют sql соединения для FetchType.EAGER, пока 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);
}
AssertNotNull завершится ошибкой, если @Transactional включен. Но будет успешным, если @Transactional прокомментировал.
Отлаживаю больше информации. Просто чтобы узнать, когда @Transactional в Hibernate не будет генерировать соединение sql для
orderService.findOrder(randomOrder.getId());
Кроме того, я пытаюсь переключиться на elicpseLink в качестве провайдера JPA. Ситуация ухудшается, когда @Transactional прокомментировал, orderService.findOrder (randomOrder.getId ()) вернет пустой список (не null, размер 0).
Любой совет? Огромное спасибо!