gpt4 book ai didi

java - 创建管理器后是否有任何理由立即调用entityManager.flush()(JPA,Hibernate)

转载 作者:行者123 更新时间:2023-12-02 10:53:05 26 4
gpt4 key购买 nike

我正在学习 Hibernate 视频类(class),其中显示了以下代码:

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()方法呢?目的是什么?

最佳答案

EntityManager#flush 实际上会立即将更改推送到数据库。

在上面的代码中,事务刚刚启动entityManager.getTransaction().begin(),并且没有任何更改需要推送到数据库,所以我认为不需要那里。您可以将其删除。

无论如何,让entitymanager负责何时将数据更改推送到数据库而不是手动控制它是一个很好的做法。当不同的应用程序或线程尝试同时访问相同的数据时,可能存在用例。

关于java - 创建管理器后是否有任何理由立即调用entityManager.flush()(JPA,Hibernate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52010012/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com