JPA - Использование entityManager в объектах сущностей - PullRequest
0 голосов
/ 01 февраля 2019

Я удалил Spring Roo из своего проекта Spring, это было ненужно, и сборка заняла много времени в eclipse sts.Я выполнил Push-In, и теперь мои объекты-сущности включают исходный код старых файлов Roo.

Ничего не изменилось более или менее, включая управление PersistentContext, которое кажется очень странным.На самом деле, я замечаю, что каждый раз, когда мне нужно создать запрос, мне нужно создать экземпляр класса сущности, чтобы получить EntityManager?

В моем классе сущности у меня есть

@Configurable
@Entity
@Table(name = "angr_clienti")
public class AngrClienti {

....

@PersistenceContext
    transient EntityManager entityManager;

public static final EntityManager entityManager() {
        EntityManager em = new AngrClienti().entityManager;
        if (em == null) throw new IllegalStateException("Entity manager has not been injected (is the Spring Aspects JAR configured as an AJC/AJDT aspects library?)");
        return em;
    }

public static List<AngrClienti> findAllAngrClientis() {
        return entityManager().createQuery("SELECT o FROM AngrClienti o", AngrClienti.class).getResultList();
    }

ЭтоСтранно, что каждый раз, когда я вызываю findAllAngrClientis (), он вызывает метод entityManager (), который создает новый объект AngrClienti () для доступа к диспетчеру сущностей.

new AngrClienti().entityManager;

Я думаю, что он занимает очень много памяти, так почему?

1 Ответ

0 голосов
/ 01 февраля 2019

Ну, а как еще вы бы предложили реализовать статический метод EntityManager?

Я не уверен, почему вы думаете, что создание нового экземпляра AngriClienti стоит дорого.new AngrClienti().entityManager просто обеспечивает получение нового EntityManager для каждой единицы работы.И поскольку объект не сохраняется, он не особенно потребляет память.

В любом случае активные записи теперь считаются анти-паттернами.На вашем месте я бы подумал о переходе на репозитории.

...