JPA EntityManager.detach () по-прежнему загружает ленивые отношения

У меня проблема, которая противоречит моему пониманию того, как это должно работать. У меня есть Arquillian-тест, который тестирует метод репозитория с запросом JPA.

Тест сохраняет объект, а затем сохраняет другой объект с первым постоянным объектом в поле. Затем он вызывает метод хранилища. Затем тест отключается (и очищает диспетчер сущностей, проверяет, что объект не содержится в em и т. Д. И т. Д.). В последнем тесте проверяется, существует ли связанный объект или нет (этого не должно быть, поскольку запрос не должен считывать отношение).

Как и ожидалось, при поиске в отладчике связанный объект имеет значение null, но когда assert фактически использует метод getRelatedObject, он загружает связанный объект.

Псевдокод для уточнения (надеюсь):

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-исключение.

Если я не так понимаю, как проверить, что запрос не заполняет связанный объект, а я нет?

(да, лучше использовать dto-объекты вместо сущности, я знаю ... у нас было это обсуждение, и я был отвергнут)

Ответы на вопрос(1)

Ваш ответ на вопрос