Сохранение огромных списков объектов занимает много времени - PullRequest
0 голосов
/ 21 мая 2011

Я пытаюсь сделать несколько больших списков сохранения объектов, используя hibernate ..

проблема перед сохранением. Мне нужно подтвердить, существует ли запись с такими же полевыми данными, если да, тогда нужно получить ее идентификатор исоздать ассоциацию в другой таблице .. иначе создайте новую запись и новую вставку в таблицу ассоциаций для того же самого.

Пожалуйста, сообщите мне, как я могу улучшить время сохранения ..

Ниже описано, как выполняется сохранение.

    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 Ответ

1 голос
/ 21 мая 2011

Когда вы сохраняете новый объект - регулярно очищайте (), а затем очищайте () сеанс, чтобы контролировать размер кэша первого уровня. что повысит производительность.

пример объясняется в документах гибернации .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...