Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate: запись в цикле. Сохраняется последняя / 19 сообщений из 19, страница 1 из 1
29.05.2016, 13:53
    #39245636
MAULER
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate: запись в цикле. Сохраняется последняя
Добрый день. есть фрагмент кода:

Код: 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
29.05.2016, 14:37
    #39245649
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate: запись в цикле. Сохраняется последняя
ID у сущности где?
...
Рейтинг: 0 / 0
29.05.2016, 14:39
    #39245651
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate: запись в цикле. Сохраняется последняя
MAULER,

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

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


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

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

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

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

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

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

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

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

Это всё есть, просто много всего выкладывать.
Если сущностей вдруг станет несколько десятков, то это всё будет притормаживать, так как вы требуете от хибера отдельный запрос на каждую вставку и batch insert он тут применить, скорее всего, не сможет.
...
Рейтинг: 0 / 0
29.05.2016, 18:14
    #39245715
MAULER
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate: запись в цикле. Сохраняется последняя
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
29.05.2016, 19:03
    #39245738
andreykaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate: запись в цикле. Сохраняется последняя
лол. ТС, он же у тебя в атаченом состоянии, ты один и тот же объект изменяешь )) надо б прочесть три состояния сущностей в хибере чтоб таких вопросов не возникало.
...
Рейтинг: 0 / 0
29.05.2016, 19:09
    #39245741
andreykaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate: запись в цикле. Сохраняется последняя
когда ты закомитил это не означает что объект задетачил, это означает только что другие потоки увидят его состояние (если изоляция базы рид комитед). чтоб тебе его заново сохранить - надо либо рвать сессию и детачить объект, либо через нью создавать новый объект, и забивать все поля либо тупо бинутилз.копипропертиз.

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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