私はそれがどのように動作するのかについての私の理解に反する問題を抱えています。私はJPAクエリを使ってリポジトリメソッドをテストするArquillianテストを持っています。JPA EntityManager.detach()は遅延関係をまだロードしています
このテストでは、オブジェクトが永続化された後、フィールドに最初の永続化オブジェクトを持つ別のオブジェクトが保持されます。次に、リポジトリメソッドを呼び出します。次に、テストはデタッチされます(エンティティマネージャをクリアし、オブジェクトがemなどに含まれていないことをチェックします)。最後にテストでは、関連オブジェクトが存在するかどうかがチェックされます(問合せがリレーションを読み取ることになっていないためではありません)。
期待どおり、デバッガを見ると関連オブジェクトはnullですが、アサートが実際にgetRelatedObject-methodを使用すると、関連オブジェクトがロードされます。
擬似コードは(私は願って)明確にする:それは間違っている私の理解、関連するオブジェクトがまだロードする必要があり
FirstObject f = new FirstObject();
em.persist(f);
SecondObject s = new SecondObject();
s.setFirstObject(f);
em.persist(f);
MyRepo r = new MyRepo();
SecondObject result = r.runQuery(f.getId());
em.detach(result); //result.getFirstObject is null
em.clear();
assertIsNull(result.getFirstObject()); //loads first object and test fails
ですか?私はLazyInit例外を予期していました。
私は私の理解が間違っている場合、どのようにクエリが関連オブジェクトを設定していないことを確認する方法はありませんか?