保存大量对象需要花费大量时间

Posted

技术标签:

【中文标题】保存大量对象需要花费大量时间【英文标题】:Saving huge lists of objects taking lot of time 【发布时间】:2011-05-21 13:03:32 【问题描述】:

我正在尝试使用 hibernate 保存一些大型对象列表..

问题是在保存之前我需要确认是否已经存在具有相同字段数据的记录,如果是,则需要获取其 id 并在另一个表中创建关联.. 否则在关联表中创建一个新条目和一个新插入一样的。。

请指导我如何提高保存时间..

以下是如何完成保存..

    Session session = SchemaManager.getDatabaseSession("com.server.domin.PublicaccountBehavior");
    try 
        List<Post> posts = this.getAllPosts();
        Transaction transaction = session.beginTransaction();
        for (Post post : posts) 
            Behavior behavior = new Behavior();
            behavior.setElementValue(val);
            behavior.setIsDeleted(false);
            Date now = new Date();
            behavior.setCreatedOn(now);
            behavior.setModifiedOn(now);
            PublicaccountType type = new PublicaccountType();
            type.setId(3L);
            behavior.setPublicaccountType(type);

            PublicaccountBehavior publicaccountBehavior = new PublicaccountBehavior();
            publicaccountBehavior.setBehavior(behavior);
            publicaccountBehavior.setPublicAccount(account);
            publicaccountBehavior.setTimeOfBookmark(post.getTimeAsDate());
            publicaccountBehavior.setCreatedOn(now);
            publicaccountBehavior.setModifiedOn(now);
            try 

                Behavior behav;
                List list2 = session.createQuery("from Behavior where elementValue = :elementVal").setString("elementVal",
                        behavior.getElementValue()).list();
                if (list2.size() > 0) 
                    behav = (Behavior) list2.get(0);
                    publicaccountBehavior.setBehavior(behav);
                 else 
                    Long id = (Long) session.save(behavior);
                    behavior.setId(id);
                    publicaccountBehavior.setBehavior(behavior);
                
                session.saveOrUpdate(publicaccountBehavior);

             catch (HibernateException e) 
                e.printStackTrace();
            
        
        transaction.commit();

【问题讨论】:

【参考方案1】:

当您保存一个新对象时 - 定期刷新()然后清除()会话,以控制一级缓存的大小。这将提高性能。

hibernate docs 中解释了示例。

【讨论】:

以上是关于保存大量对象需要花费大量时间的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio 需要花费大量时间来构建 Xamarin 应用程序并且不会发生

在 EF6 中执行 StoredProcedure 需要花费大量时间

在 EF6 中执行 StoredProcedure 需要花费大量时间

我的 gprof 输出中的这些 c++ std 函数是啥,它们需要花费大量时间?

加密的核心数据在删除 40 万多条记录时需要花费大量时间

花费大量时间来构建 gradle