powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate: запись в цикле. Сохраняется последняя
19 сообщений из 19, страница 1 из 1
Hibernate: запись в цикле. Сохраняется последняя
    #39245636
MAULER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день. есть фрагмент кода:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
for (int i = 0; i < nodeList.getLength(); i++)
{
  // Выводим информацию по каждому из найденных элементов
  Node node = nodeList.item(i);
  if (Node.ELEMENT_NODE == node.getNodeType())
  {
     Element element = (Element) node;
     cShortName = element.getAttribute("shortname");
     cFullName = element.getAttribute("fullname");
     iPath = element.getAttribute("ipath");
     aShortName = element.getElementsByTagName("article").item(0).getAttributes().getNamedItem("shortname").getNodeValue();
     aFullName = element.getElementsByTagName("article").item(0).getAttributes().getNamedItem("fullname").getNodeValue();
     aText = element.getElementsByTagName("article").item(0).getAttributes().getNamedItem("text").getNodeValue();

     mynotesEntity.setcShortName(cShortName);
     mynotesEntity.setcFullName(cFullName);
     mynotesEntity.setiPath(iPath);
     mynotesEntity.setaShortName(aShortName);
     mynotesEntity.setaFullName(aFullName);
     mynotesEntity.setaText(aText);

     session.beginTransaction();
     session.save(mynotesEntity);
     session.getTransaction().commit();

   }
}



Почему то в таблицу сохраняется последняя "сущность" прочтённая в цикле. Причем точно проверил, что читаются все три, а сохраняется только последняя. Подскажите, что не так?
...
Рейтинг: 0 / 0
Hibernate: запись в цикле. Сохраняется последняя
    #39245649
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ID у сущности где?
...
Рейтинг: 0 / 0
Hibernate: запись в цикле. Сохраняется последняя
    #39245651
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MAULER,

А экземпляр (объект) класса сущности где создаётся? У вас, похоже, один объект на всё про всё? Нужен новый экземпляр на каждую итерацию.
...
Рейтинг: 0 / 0
Hibernate: запись в цикле. Сохраняется последняя
    #39245691
MAULER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

Нет, нужен
Код: java
1.
session.clear();
...
Рейтинг: 0 / 0
Hibernate: запись в цикле. Сохраняется последняя
    #39245693
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MAULERНет, нужен
Код: java
1.
session.clear();


Остаётся пожелать вам удачи с такой самоуверенностью.
...
Рейтинг: 0 / 0
Hibernate: запись в цикле. Сохраняется последняя
    #39245703
MAULER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

Спасибо, но это работает.

Что касается Вашего вопроса про "где ID" - оно есть, в классе сущности "MynotesEntity" в пэкэдже "shared". Называется "ID" и значение генерируется автоматом благодаря аннотации @GeneratedValue

"экземпляр (объект) класса сущности" создается в клиенте в пэкэдже "client" и передается через RPC вызов в качестве входного параметра соотв. методу.

Это всё есть, просто много всего выкладывать.
...
Рейтинг: 0 / 0
Hibernate: запись в цикле. Сохраняется последняя
    #39245709
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MAULERBlazkowicz,

Спасибо, но это работает.

Что касается Вашего вопроса про "где ID" - оно есть, в классе сущности "MynotesEntity" в пэкэдже "shared". Называется "ID" и значение генерируется автоматом благодаря аннотации @GeneratedValue

"экземпляр (объект) класса сущности" создается в клиенте в пэкэдже "client" и передается через RPC вызов в качестве входного параметра соотв. методу.

Это всё есть, просто много всего выкладывать.
Если сущностей вдруг станет несколько десятков, то это всё будет притормаживать, так как вы требуете от хибера отдельный запрос на каждую вставку и batch insert он тут применить, скорее всего, не сможет.
...
Рейтинг: 0 / 0
Hibernate: запись в цикле. Сохраняется последняя
    #39245715
MAULER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

Да, но в моём конкретном случае, это всего лишь инициализация БД, несколькими записями из XML-файла.
Для чтения таблицы "одним чохом" есть такой метод:

Код: java
1.
2.
3.
4.
5.
6.
    @Override
    public List<MynotesEntity> getAllMynotesEntity() {
        Query query = session.createQuery("from MynotesEntity order by iPath");
        mynotesEntityList = query.list();
        return mynotesEntityList;
    }



это в имплементации на стороне сервера.
...
Рейтинг: 0 / 0
Hibernate: запись в цикле. Сохраняется последняя
    #39245738
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
лол. ТС, он же у тебя в атаченом состоянии, ты один и тот же объект изменяешь )) надо б прочесть три состояния сущностей в хибере чтоб таких вопросов не возникало.
...
Рейтинг: 0 / 0
Hibernate: запись в цикле. Сохраняется последняя
    #39245741
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
когда ты закомитил это не означает что объект задетачил, это означает только что другие потоки увидят его состояние (если изоляция базы рид комитед). чтоб тебе его заново сохранить - надо либо рвать сессию и детачить объект, либо через нью создавать новый объект, и забивать все поля либо тупо бинутилз.копипропертиз.

вроде там еще как то задетачить можно внутри сессии, но я не помню на память щас. да и имхо таким образом ты всю идею орма крушишь.

старожилы поправите?
...
Рейтинг: 0 / 0
Hibernate: запись в цикле. Сохраняется последняя
    #39245744
MAULER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT,

У меня всё работает! Но я с удовольствием посмотрю на Ваш вариант реализации :)
...
Рейтинг: 0 / 0
Hibernate: запись в цикле. Сохраняется последняя
    #39245751
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MAULER,

конечно работает. вопрос насколько это верно и не против идеологии. А так в хибере есть еще такая штука:

http://docs.jboss.org/hibernate/core/3.3/reference/en/html/batch.html

стейтлесс сейшн что кажется тебе и надо.

впрочем, я лично с такой проблемой не сталкиваюсь тк приложения все по слоям, и там в принципе, такая проблема может вылезать только из-за weak-design.
...
Рейтинг: 0 / 0
Hibernate: запись в цикле. Сохраняется последняя
    #39245753
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MAULERandreykaT,

У меня всё работает! Но я с удовольствием посмотрю на Ваш вариант реализации :)
угу. глянул. оно как раз детач и делает впрочем, тут вопрос, правильно ли детач делать в таком контексте, если у вас там нет дальнейших взаимодейстий по лейзи связям, то наверное - пофиг, т.к. этим вызовом ты рвешь вообще ВСЁ. а так я всё-же придержусь мнения, что это против орм дизайна.
...
Рейтинг: 0 / 0
Hibernate: запись в цикле. Сохраняется последняя
    #39245754
MAULER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT,

У меня опыта работы с Hibernate вообще никакого :) Поэтому, наверно, и мочу такие опусы :) Часть ваших фраз, понимаю с трудом, но за ссылку спасибо. Учиться никогда не поздно :)
...
Рейтинг: 0 / 0
Hibernate: запись в цикле. Сохраняется последняя
    #39245756
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот пойдешь на собес а тебя там как спросят три состояния сущности в хибере - сразу поймешь. правда после собеса.
...
Рейтинг: 0 / 0
Hibernate: запись в цикле. Сохраняется последняя
    #39245834
MAULER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT,

Действительно, смешно до безумия.
...
Рейтинг: 0 / 0
Hibernate: запись в цикле. Сохраняется последняя
    #39245845
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MAULERandreykaT,

Действительно, смешно до безумия.
Так я ж не над тобой смеюсь, а над неплохой мотивацией к учебному процессу. :)
...
Рейтинг: 0 / 0
Hibernate: запись в цикле. Сохраняется последняя
    #39245846
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MAULER,

Кстати, советую к просмотру курсы Коушика в ютубе, если нет желания вникать в мануалы, а суть понять хочется и быстро:

https://www.youtube.com/results?search_query=Koushik
...
Рейтинг: 0 / 0
Hibernate: запись в цикле. Сохраняется последняя
    #39246037
MAULER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT,

Спасибо за ссылку! Буду вникать!
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate: запись в цикле. Сохраняется последняя
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]