У меня проблема с проводной связью.JPA/Hiberante не генерируют соединение sql для FetchType.EAGER, а Spring @Transactional аннотируется
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());
Alos я пытаюсь переключиться на elicpseLink в качестве поставщика JPA. Все становится хуже, когда @Transactional прокомментировал, orderService.findOrder (randomOrder.getId()) вернет пустой список (но не null, размер 0).
Любые советы? Большое спасибо!
1 Код получает тот же результат в Hibernate и eclipseLink. Я знаю, буду ли я строить двусторонние отношения, это сработает. – user1327938