保存大量对象需要花费大量时间
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 需要花费大量时间