O JPA EntityManager.detach () ainda carrega relações preguiçosas

Eu tenho um problema que contraria minha compreensão de como ele deveria funcionar. Eu tenho um teste Arquillian que testa um método de repositório com uma consulta JPA.

O teste persiste em um objeto e, em seguida, persiste em outro objeto com o primeiro objeto persistente em um campo. Em seguida, chama o método de repositório. Em seguida, o teste desanexa (e limpe o gerenciador de entidades, verifica se o objeto não está contido no em etc etc). Por último, o teste verifica se o objeto relacionado está lá ou não (não deveria, pois a consulta não deve ler a relação).

Como esperado, ao procurar no depurador, o objeto relacionado é nulo, mas quando a declaração realmente usa o método getRelatedObject, carrega o objeto relacionado.

Pseudocódigo para esclarecer (espero):

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

Entendo que está errado, o objeto relacionado ainda deve carregar? Eu esperava uma exceção LazyInit.

Se meu entendimento está errado, como verificar se uma consulta não preenche um objeto relacionado que não?

(sim, usar dto-objects em vez da entidade é melhor, eu sei ... nós tivemos essa discussão e fui anulado)

questionAnswers(1)

yourAnswerToTheQuestion