Я должен вызывать EntityManager.clear () часто, чтобы избежать утечек памяти? - PullRequest
8 голосов
/ 11 февраля 2010

Я новичок в JPA / OpenJPA, и я заметил, что если я не вызову EntityManager.clear() после того, как сохраню сущности, я получу OutOfMemoryError (я продолжаю добавлять новые сущности в цикле). Я не уверен, является ли это ожидаемым поведением, или это просто и глюк OpenJPA 1.2.1.

Итак, я должен явно отделить сущности сам? Если нет, то это хорошая практика?

Ответы [ 3 ]

5 голосов
/ 11 февраля 2010

Зависит от того, сколько объектов вы вносите в процесс сохранения (читай). Если вы обрабатываете большие числа (или некоторые объекты имеют большой размер), тогда использование clear () может иметь смысл. Каждый раз, когда объект читается, он должен помещаться в кэш L1 с помощью JPA.

5 голосов
/ 11 февраля 2010

У меня нет большого опыта работы с JPA.Однако это будет полезно -
В JPA вы должны либо:
- создать новый EntityManager для каждой транзакции.
- вызывать clear () после каждой транзакции, чтобы очистить контекст постоянства.

3 голосов
/ 11 февраля 2010

Похоже, что-то не так в вашем дизайне. Обычно сущность отсоединяется, когда она выходит за рамки диспетчера сущностей. И это одна из причин, по которой вы не можете лениво загружать отношения вне области действия.

Что касается моего опыта, я редко использовал em.clear (), если вообще когда-либо. Я использовал реализацию Hibernate и Toplink Essentials. Опыт работы с OpenJPA пока отсутствует.

...