| 
 | 
| 
 
Hibernate обновление коллекции 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Господа, при работе с HIbernate возникла следующая проблема, которая мне, мягко говоря не понятна. У меня есть два класса: Справочник кодов: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. и Информация о клиенте. Отношение кодов к клиентам Много ко многим. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. При добавлении кода в коллекцию, и затем сохранения главного объекта Код: plaintext 1. 2. У меня получается следующий SQL Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. То есть Hibernate мне зачем-то полностью удаляет все дочерние записи, а потом вставляет их заново, но уже изменённые. Это нормально? Есть какие-то способы заставить его вносить только изменения а не просто перезаписывать всё? ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 25.07.2007, 20:36 | 
  
  
  
   | 
||
| 
 
Hibernate обновление коллекции 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Убери @Cascade(value = { CascadeType.SAVE_UPDATE }) ? ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 25.07.2007, 20:49 | 
  
  
  
   | 
||
| 
 
Hibernate обновление коллекции 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  меня реально задрал этот антипаттерн:  http://forum.hibernate.org/viewtopic.php?t=977710   http://sql.ru/forum/actualthread.aspx?tid=453741&hl=manytomany+update+delete+insert  hiber и DAO очень разные вещи. если тут Код: plaintext то второй раз Код: plaintext ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 26.07.2007, 10:32 | 
  
  
  
   | 
||
| 
 
Hibernate обновление коллекции 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  someone1Убери @Cascade(value = { CascadeType.SAVE_UPDATE }) ? Не помогает exppменя реально задрал этот антипаттерн: Я не много не понял, о чём вы. Поиграл с CascadeType - везде один и тот же результат. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 26.07.2007, 13:13 | 
  
  
  
   | 
||
| 
 
Hibernate обновление коллекции 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Angel13 Я не много не понял, о чём вы. Код: plaintext чаепор а рыкефйрфк фкнынй4цефукпф фп вапи ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 26.07.2007, 14:07 | 
  
  
  
   | 
||
| 
 
Hibernate обновление коллекции 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  expp dao.update(profile); - убери Не обращайте внимание на название dao :) Это его какой-то нерадивый программист так обозвал. на самом деле это к DAO паттерну никакого отношения не имеет. Там внутри просто вызывается метод session.saveOrUpdate(profile); Посему - не могу его убрать, так как именно он сохраняет данные в БД. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 26.07.2007, 15:14 | 
  
  
  
   | 
||
| 
 
Hibernate обновление коллекции 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  1. шо происходит тута   Код: plaintext ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 26.07.2007, 15:44 | 
  
  
  
   | 
||
| 
 
Hibernate обновление коллекции 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Angel13... внутри просто вызывается метод session.saveOrUpdate(profile); Посему - не могу его убрать, так как именно он сохраняет данные в БД. все зависит от того в каком у вас состоянии объект profile, если в persitent состоянии то dirty checking происходит автоматом и вам не нужно вызывать saveOrUpdate. Этот метод предназначен для перевода из состония detached в persistent. Вообще честно говоря hibernate это чуть ли не единственная технология, которые многие начинают использовать, даже не понимая и не пытаясь понять как он работает, прочитав step by step и замапив таблицу на класс, после этого процесс обучения прекращается. И потом начинаются вопросы "Почему мое приложение не летает? Ну и фиговая же у hibernate производитьльность". Почему то никто не задает вопросы "Я не знаю что такое sql и oracle, но почему мое приложение работает так медленно?" ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 26.07.2007, 15:52 | 
  
  
  
   | 
||
| 
 
Hibernate обновление коллекции 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  vas0 Почему то никто не задает вопросы "Я не знаю что такое sql и oracle, но почему мое приложение работает так медленно?" У меня достаточно много опыта работы с Oracle и SQL :) собственно говоря это моя специальность. Но так получилось что пришлось кодить на JAVA. Поверьте, мне самому дико видеть в комментариях по Hibernate, что "это технология позволяет разработчику вообще не думать о БД" (с). vas0все зависит от того в каком у вас состоянии объект profile, если в persitent состоянии то dirty checking происходит автоматом и вам не нужно вызывать saveOrUpdate. Этот метод предназначен для перевода из состония detached в persistent. dirty checking меня не устраивает. expp шо происходит тута CustomerProfile profile = ...; Тут я поднимаю из БД объект типа CustomerProfile, при помощи session.createQuery("...").uniqueResult(); expp 2. убери его нах Ну не могу я убрать это :) Смысл такой: 1. я загружаю объект. 2. изменяю в нём коллекцию (и другие параметры) 3. сохраняю объект. При этом он мне так странно(см. выше) сохраняет коллекции. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 26.07.2007, 16:06 | 
  
  
  
   | 
||
| 
 
Hibernate обновление коллекции 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  так чувак ты до конца меня достал ... когда ты достал объект из сессии авторsession.createQuery("...").uniqueResult(); теперь она думает о нём. тебе уже не надо. меняешь коллекцию. изменения попадут в базу при flushе по commit'у транзакции (jta). ты можешь принудительно его вызвать. не надо вызывать Код: plaintext чем тебе не приглянулся dirty check? и учти что хибер-style сильно отличается от Oracle/SQL. оно тебе надо 7 мош ну его ? ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 26.07.2007, 16:34 | 
  
  
  
   | 
||
| 
 
Hibernate обновление коллекции 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  expp изменения попадут в базу при flushе по commit'у транзакции Допустим. Но коллекция попадёт в БД опять таки так: сначала delete всех строк в таблице связей а потом Insert их снова. Код: plaintext 1. 2. Вот это проблема! expp и учти что хибер-style сильно отличается от Oracle/SQL. оно тебе надо 7 мош ну его ? Производственная необходимость :( ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 26.07.2007, 16:45 | 
  
  
  
   | 
||
| 
 
Hibernate обновление коллекции 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Какая версия хибера? не уверен, но он либо не умеет обновлять коллекции частично, либо научился делать это недавно. могу ошибаться, я с ним не работал. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 26.07.2007, 16:59 | 
  
  
  
   | 
||
| 
 
Hibernate обновление коллекции 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  ботва какаято . показывай исходники сущностей, тест, лог . не понял insert/delete sql в логе есть ? и не надо ля ля всё он делает так что ... зашибись ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 26.07.2007, 17:09 | 
  
  
  
   | 
||
| 
 
Hibernate обновление коллекции 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  exppботва какаято . показывай исходники сущностей, тест, лог . не понял insert/delete sql в логе есть ? и не надо ля ля всё он делает так что ... зашибись а польку сплясать могёт? PS. невозможность обновить коллекцию может быть вызвана, к примеру, отсутствием PK на таблице-связке. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 26.07.2007, 17:12 | 
  
  
  
   | 
||
| 
 
Hibernate обновление коллекции 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  expp показывай исходники сущностей, тест, лог . не понял insert/delete sql в логе есть ? Исходники сущностей в первом посте. Вырезка из Лога там же. delete/insert там есть :( Timm PS. невозможность обновить коллекцию может быть вызвана, к примеру, отсутствием PK на таблице-связке. В приложении структура таблиц. PK на таблице связке есть (сделан как autoincrement поле). Но Хибернейт о нём, судя по всему не знает. Где ему это указать? Hibernate 3.0 ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 26.07.2007, 17:35 | 
  
  
  
   | 
||
| 
 
Hibernate обновление коллекции 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  м.б. @IndexColumn(name="interest_codes_id")? ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 26.07.2007, 18:21 | 
  
  
  
   | 
||
| 
 
Hibernate обновление коллекции 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  оочень странные байки... варианты использовать Set и мапить ассоц таблицу руками. завтра проверю... ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 26.07.2007, 19:07 | 
  
  
  
   | 
||
| 
 
Hibernate обновление коллекции 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  использование Setа мне помогло.  объяснение  авторBags are the worst case.... ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 27.07.2007, 10:01 | 
  
  
  
   | 
||
| 
 
Hibernate обновление коллекции 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Timm@IndexColumn(name="interest_codes_id") Помогло!! Спасибо! Теперь только мне не понятна работа Hibernate с полем interest_codes_id. Он явно не использует Сиквенс. Надеюсь что он не делает max() +1. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 27.07.2007, 12:16 | 
  
  
  
   | 
||
| 
 
Hibernate обновление коллекции 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Angel13Теперь только мне не понятна работа Hibernate с полем interest_codes_id. Он явно не использует Сиквенс. Надеюсь что он не делает max() +1. Ну, можно включить дебаг для statements+binds и поглядеть. http://www.javalobby.org/java/forums/t44119.html ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 27.07.2007, 12:22 | 
  
  
  
   | 
||
| 
 
Hibernate обновление коллекции 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Оставляю информацию для потомков: в таблице Код: plaintext 1. 2. 3. 4. 5. пришлось поменять PK с interest_codes_id на пару (customer_profile_id, interest_dict_id ), потому что interest_codes_id hibernate генерит уникальным только в рамках одного значения customer_profile_id. Пример: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 27.07.2007, 12:51 | 
  
  
  
   | 
||
| 
 
Hibernate обновление коллекции 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  @IndexColumn() определяет колонку в которой храниться индекс элементов списка. думаю это не совсем то чего следует хотеть ManyToMany стоит мапить : - Set ом с прямой стороны Collection c инверсной (та которая mappedBy) - если же bag (Collection ) с обоих сторон (получаем полное удаление и вставку всей коллекции) то стоит использовать ColumnId. тем самым объявляя коллекцию idbag ом. ColumnId определяет первичный ключ для ассоциативной таблицы, как и хотел Анхел13. работает это прикольно, например если для пары объектов разрываем такое отношение, а для пары вставляем - получаем только один update ассоциативной таблицы ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 07.08.2007, 11:36 | 
  
  
  
   | 
||
| 
 
Hibernate обновление коллекции 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  exppменя реально задрал этот антипаттерн:  http://forum.hibernate.org/viewtopic.php?t=977710   https://www.sql.ru/forum/actualthread.aspx?tid=453741&hl=manytomany update delete insert  hiber и DAO очень разные вещи. если тут Код: java 1. объект вытащили из сессии (или вставили) то второй раз Код: java 1. это делать не надо Ооо, спасибо большое. А я то думаю, чё у меня за ошибка. ))) ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 09.04.2019, 01:44 | 
  
  
  
   | 
||
| 
 
Hibernate обновление коллекции 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Angel13При добавлении кода в коллекцию, и затем сохранения главного объекта  Код: java 1. 2. 3. Здесь важно, как создаётся profile. Если это new, то всё логично - в нём нет старых связей и к нему добавляются новые, в итоге хибер удаляет старые и добавляет новые. Если же получение в транзакции от хибера - совсем другая песня. Так что надо показывать подробно, а не "как мне кажется". ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 09.04.2019, 11:48 | 
  
  
  
   | 
||
| 
 | 

start [/forum/topic.php?fid=59&fpage=30&tid=2121382]:  | 
    0ms | 
get settings:  | 
    10ms | 
get forum list:  | 
    12ms | 
check forum access:  | 
    3ms | 
check topic access:  | 
    3ms | 
track hit:  | 
    42ms | 
get topic data:  | 
    10ms | 
get forum data:  | 
    2ms | 
get page messages:  | 
    65ms | 
get tp. blocked users:  | 
    1ms | 
| others: | 254ms | 
| total: | 402ms | 

| 0 / 0 | 

    Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
    
    
    «На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
    
    
    ... ля, ля, ля ...