@Transactional JUnit テストをセットアップしており、いくつかのテスト データをデータベースに保持し、関連付けが正しいかどうかもテストしたいと考えています。ただし、アソシエーションをテストする場合、非トランザクション テストで機能する場合でも、常に null と評価されます。
@Before アノテーションを使用して 2 つのオブジェクトを永続化します。
@Before
public void testData() {
TestObjectOne o = new TestObjectOne();
o.setName("One");
repo.saveEntity(o); //autowired
TestObjectTwo t = new TestObjectTwo();
t.setOne(o);
t.setName("Two");
repo.saveEntity(t);
}
テストでこれら 2 つのオブジェクトにアクセスすると、正しいインスタンスが得られます。
TestObjectOne o = repo.getOneByName("One");
TestObjectOne t = repo.getTwoByName("Two");
と の間の関連付けをチェックするt
とo
、その関連付けを明示的に定義したため、正しい参照が得られます。
Assert.assertNotNull(t.getOne());
しかし、逆にチェックすると、オブジェクトo
は正しく更新されません。
Assert.assertNotNull(o.getTwos());
関連付けは、ドメイン オブジェクトで次のように定義されます。
でOne
:
@OneToMany(mappedBy = "one", fetch = FetchType.EAGER)
private List<Two> twos;
でTwo
:
@ManyToOne(optional = false)
private One one;
テストを @Transactional として実行しないと、うまく動作します。
@Before メソッドの代わりにテスト内にエンティティを保存して編集 しても、違いはありません。