java - 使用 hibernate 将数据集合持久保存/更新到数据库中

标签 java hibernate jpa

我是 Hibernate 框架的新手,我对持久化和更新的工作方式很好奇。

目前在我的项目中,当我想将数据集合保留或更新到数据库中时,我正在通过循环方法一一执行。例如,

    public persistData(){
       List<Person> personList = new ArrayList<>();
       for(Person person : personList){
            session.persist(person);
       }
    }

是否可以,例如,

    session.persist(personList);

或者还有其他方法可以立即保留/更新数据集合而不循环?

编辑: 我发现 Hibernate 批处理在 How to insert multiple rows into database using hibernate?Best way to insert a good amount of records in hibernate

我正在开发用于使用 hibernate 保存/更新/删除数据的通用类,我应该提供该方法

    public void (List<T> addedItemList)

    public void (T addedItem)

据我了解,批量持久化应该是在大量交易的情况下完成的,对吗?如果有时候只有1、2个对象需要持久化,那么批处理还合适吗?

最佳答案

这里的要点是开始事务,持久化所有内容,然后提交。尝试不要使用 @Transaction,因为您正在使用代码执行此操作。

                EntityManager em = entityManagerProvider.get();
//                em.clear();//remove this if caching is necessary
                em.getTransaction().begin();
                for(buildings b:buildingsArray) {
                     em.persist(b);
                }
                em.getTransaction().commit();

关于java - 使用 hibernate 将数据集合持久保存/更新到数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36833027/

相关文章:

hibernate - JPA 实体是否可以具有未映射到 DB 列的字段

java - 如何让try-finally中的finally等待线程完成?

java - 如何以编程方式将项目添加到 Eclipse 中的 junit View

java - @OneToOne/@ManyToOne/@ManyToMany 的非拥有实体方

java - JSP 文件不使用多对多(Hibernate)从表中检索数据

hibernate - 修剪 Liferay : Removing Hibernate and other unused applications

java - 我如何强制我的类的任何子类始终调用它们正在覆盖的父类的实现方法?

java - OkHttp 异步调用返回 JsonArray Null

java - com.mysql.jdbc.exceptions.MySQLNonTransientConnectionException : Connection. close() 已被调用。该状态下无效操作

java - @CascadeOnDelete 和 CascadeType.REMOVE 注解有什么区别?