Есть ли причины вызывать entityManager.flush () сразу после создания менеджера (JPA, Hibernate) - PullRequest
0 голосов

Я слежу за видео-уроком Hibernate, и там был показан этот код:

public class Main {

    private static EntityManagerFactory entityManagerFactory;

    public  static void main(String[] args)
    {
        entityManagerFactory = Persistence.createEntityManagerFactory("org.hibernate.tutorial.jpa");

        addEntities("Client1","Bank1");

        entityManagerFactory.close();
    }

    private static void addEntities(String clientName, String BankName)
    {
        Client client = new Client();
        client.setName(clientName);

        Bank bank = new Bank();
        bank.setName(BankName);

        EntityManager entityManager = entityManagerFactory.createEntityManager();
        entityManager.getTransaction().begin();
        entityManager.flush();

        entityManager.persist(client);
        entityManager.persist(bank);

        entityManager.getTransaction().commit();
    }
}

И меня беспокоит эта часть кода:

EntityManager entityManager = entityManagerFactory.createEntityManager();
        entityManager.getTransaction().begin();
        entityManager.flush();

Мы создали новый EntityManager.Как я понимаю, у него пустой контекст сохраняемости, как он только что был создан, не так ли?В таком случае, почему мы вызываем метод flush ().Какова цель?

1 Ответ

0 голосов
/ 24 августа 2018

EntityManager # flush фактически немедленно вносит изменения в базу данных.

В вышеприведенном коде транзакция только что началась , Вы можете удалить его.

В любом случае, рекомендуется, чтобы entitymanager позаботился о том, когда помещать изменения данных в базу данных, вместо того, чтобы вручную контролировать ее. Возможен случай, когда разные приложения или потоки пытаются получить доступ к одним и тем же данным одновременно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...