2016-06-01 8 views
1

У меня проблема, которая противоречит моему пониманию того, как она должна работать. У меня есть тест Arquillian, который проверяет метод репозитория с запросом JPA.JPA EntityManager.detach() все еще загружает ленивые отношения

Тест сохраняет объект, а затем сохраняется другой объект с первым сохраняемым объектом в поле. Затем он вызывает метод репозитория. Затем тест отделяется (и очищает entitymanager, проверяет, что объект не содержится в 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-объекты вместо лица лучше, я знаю ... мы провели эту дискуссию, и я отменил)

ответ

3

Книга Pro JPA 2 (Apress, p160) отмечает

«поведение доступа незаряженный атрибут, когда объект находится отдельно не определен. Некоторые производители могут попытаться решить отношения, в то время как другие могут просто выбросить исключение или оставить атрибут неинициализированным.»

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

Eclipselink Lazy Loading

http://issues.apache.org/jira/browse/OPENJPA-2483

http://blog.ringerc.id.au/2012/06/jpa2-is-very-inflexible-with-eagerlazy.html

 Смежные вопросы

  • Нет связанных вопросов^_^