非常に配線された問題があります。JPA/HiberanteはFetchType.EAGER用のjoin sqlを生成しませんが、Spring @ Transactionalは注釈付きです
JPA/HiberanteはFetchType.EAGERの結合sqlを生成しませんが、Spring @ Transactionactionは注釈を付けます。しかし、私が@トランザクションを削除すれば。すべて順調。
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私はJPAプロバイダとしてelicpseLinkに切り替えよう
orderService.findOrder(randomOrder.getId());
ALOSのSQLに参加生成しないとき、ちょうど見つけることができます。 @Transactionalがコメントしたとき、orderService.findOrder(randomOrder.getId())は空のリスト(nullでない、サイズ0)を返します。
アドバイスはありますか?どうもありがとう!
1コードはHibernateとeclipseLinkで同じ結果を得ます。私は双方向の関係を構築すればうまくいくことを知っています。 – user1327938