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

发布于 2024-11-09 01:10:28 字数 2024 浏览 0 评论 0原文

我正在尝试使用 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();

I am trying to do some big lists of object saving using hibernate..

problem is before saving I need to confirm if a record with same field data already exists if yes then need to fetch its id and create an association in another table.. else make a new entry and a new insert in the association table for the same..

Please guide me how I can improve the save time..

following is how the save is done..

    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();

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

永言不败 2024-11-16 01:10:28

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

hibernate 文档中解释了示例

When you are saving a new object - flush() and then clear() the session regularly in order to control the size of the first-level cache. which will enhance the performance.

example is explained in hibernate docs.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文