Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Hibernate, many-to-many, проблема при сохранении? в общую таблицу между двумя объектами. 
:(
    Опции темы
unkis
  Дата 11.12.2006, 18:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 802
Регистрация: 8.9.2004

Репутация: нет
Всего: 1



Ребята у меня следующая проблема:

При сохранении  в базу данных двух объектов имеющих между собой m:n отношения, не сохраняются данные в общую таблицу  между этими двумя объектами, при этом сами объекты каждый в сою таблицу сохраняется.

В моём случаи есть обекты 

Client 0..*-------------0..* Produkt

После генерации в базе данных будет три таблицы:

Cleint -----------client_produkt---------Produkt

так вот в таблицу Client и Produkt данные сохраняются, а в client_produkt нет.

Вопрос почему?

вот мои маппинги.

Client.hbm.xml

Код

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping schema="PUBLIC" package="auktion"> 
  <class name="Client" table="client" schema="PUBLIC" optimistic-lock="none"> 
    <id name="id" type="integer" unsaved-value="null" column="id">
      <generator class="native"/>
    </id>
    <list name="auktion" table="auktion_client" cascade="all,delete-orphan"> 
      <key foreign-key="auktion_id" column="auktion_id"/>
      <list-index column="idx_1"/>
      <many-to-many entity-name="auktion.Auktion" foreign-key="client_id" column="client_id"/>
    </list>
    <list name="gebot" cascade="none"> 
      <key foreign-key="gebot_id" column="gebot_id"/>
      <list-index column="gebot_idx"/>
      <one-to-many entity-name="auktion.Gebot"/>
    </list>
    <list name="vorgemerkteProdukts" table="client_produkt" invers="true" cascade="all"> 
      <key foreign-key="vorgemerkteProdukts_id" column="vorgemerkte_produkts_id"/>
      <list-index column="idx"/>
      <many-to-many entity-name="auktion.Produkt" foreign-key="clients_id" column="clients_id"/>
    </list>
  </class>
</hibernate-mapping>



Produkt.hbm.xml

Код

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping schema="PUBLIC" package="auktion"> 
  <class name="Produkt" table="produkt" schema="PUBLIC" optimistic-lock="none"> 
    <id name="id" type="integer" unsaved-value="null" column="id">
      <generator class="native"/>
    </id>
    <property name="preis" type="big_decimal" column="preis"/>
    <property name="ebayID" type="string" column="ebayid"/>
    <property name="beschreibung" type="string" column="beschreibung"/>
    <list name="clients" table="client_produkt" cascade="all" invers="true"> 
      <key foreign-key="clients_id" column="clients_id"/>
      <list-index column="idx_1"/>
      <many-to-many entity-name="auktion.Client" foreign-key="vorgemerkteProdukts_id" column="vorgemerkte_produkts_id"/>
    </list>
  </class>
</hibernate-mapping>


Сохраняю вот так
Код

            Client client = new Client();
            Produkt produkt = new Produkt();
            produkt.addClients(client);
            produkt.setEbayID("123456789");
            produkt.setPreis(new BigDecimal(569));
            produkt.setBeschreibung("Produkt 3");
                      
            session.save(produkt);


P.s: вопрос обсуждался в другом топику  http://forum.vingrad.ru/topic-125708.html


--------------------
www.unkis.com
PM MAIL WWW   Вверх
tux
Дата 11.12.2006, 19:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


Профиль
Группа: Участник Клуба
Сообщений: 1853
Регистрация: 10.2.2005
Где: msk.ru

Репутация: 74
Всего: 132



Код

<list name="clients" table="client_produkt" inverse="true"> 
    <key foreign-key="clients_id" column="clients_id"/>
    <many-to-many class="auktion.Client" column="vorgemerkte_produkts_id"/>
</list>

в Produkt.hbm.xml. Что получится?

Не надо больше создавать дублирующиеся темы!!!

Это сообщение отредактировал(а) tux - 11.12.2006, 19:06
PM MAIL Skype GTalk Jabber YIM   Вверх
unkis
Дата 11.12.2006, 19:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 802
Регистрация: 8.9.2004

Репутация: нет
Всего: 1



Извиняюсь но я не понимаю вопроса что значит?
Цитата

в Produkt.hbm.xml. Что получится?





--------------------
www.unkis.com
PM MAIL WWW   Вверх
tux
Дата 11.12.2006, 19:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


Профиль
Группа: Участник Клуба
Сообщений: 1853
Регистрация: 10.2.2005
Где: msk.ru

Репутация: 74
Всего: 132



Берем вот это
Код

<list name="clients" table="client_produkt" inverse="true"> 
    <key foreign-key="clients_id" column="clients_id"/>
    <many-to-many class="auktion.Client" column="vorgemerkte_produkts_id"/>
</list>

заменяем вот это в Produkt.hbm.xml на то, что выше
Код

<list name="clients" table="client_produkt" cascade="all" invers="true"> 
   <key foreign-key="clients_id" column="clients_id"/>
   <list-index column="idx_1"/>
   <many-to-many entity-name="auktion.Client" foreign-key="vorgemerkteProdukts_id" column="vorgemerkte_produkts_id"/>
</list>

Что в результате получилось? Заработало или нет?
PM MAIL Skype GTalk Jabber YIM   Вверх
unkis
Дата 11.12.2006, 20:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 802
Регистрация: 8.9.2004

Репутация: нет
Всего: 1



так не должно работать, так как у elemt List всегда должен быть атрибут  <list-index column="idx_1"/>, так как list гарантирует порядок и hibernate должен об этом знать, и это возможно только при помощи <list-index column="idx_1"/>.
По моему так стояло в документации, хотя сейчас попробую.

Добавлено @ 20:32 
как я и говорил не работает


--------------------
www.unkis.com
PM MAIL WWW   Вверх
tux
Дата 11.12.2006, 20:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


Профиль
Группа: Участник Клуба
Сообщений: 1853
Регистрация: 10.2.2005
Где: msk.ru

Репутация: 74
Всего: 132



А если list-index вернуть?
PM MAIL Skype GTalk Jabber YIM   Вверх
unkis
  Дата 11.12.2006, 21:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 802
Регистрация: 8.9.2004

Репутация: нет
Всего: 1



если вернуть list-index

то получается следующий маппинг:
Код

 <list name="clients" table="client_produkt"  inverse="true"> 
   <key foreign-key="clients_id" column="clients_id"/>
   <list-index column="idx_1"/>
   <many-to-many entity-name="auktion.Client" foreign-key="vorgemerkteProdukts_id" column="vorgemerkte_produkts_id"/>
</list>


то есть практически то что у меня било за исключением отсутствия cascade="all".

то выбрасивает следующую ошибку:
Код

No row with the given identifier exists: [auktion.Client#1]
     [java] Exception in thread "main" org.hibernate.ObjectNotFoundException: No row with the given identifier exists: [auktion.Client#1]
     [java] at org.hibernate.ObjectNotFoundException.throwIfNull(ObjectNotFoundException.java:27)
     [java] at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:65)
     [java] at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:98)
     [java] at org.hibernate.proxy.CGLIBLazyInitializer.intercept(CGLIBLazyInitializer.java:158)
     [java] at auktion.Client$$EnhancerByCGLIB$$6c88a723_2.getVorgemerkteProdukts(<generated>)
     [java] at auktion.Hibernate_Test.main(Hibernate_Test.java:89)
     [java] Java Result: 1
BUILD SUCCESSFUL


если верну cascade="all" то работает как и раньше


--------------------
www.unkis.com
PM MAIL WWW   Вверх
unkis
Дата 11.12.2006, 22:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 802
Регистрация: 8.9.2004

Репутация: нет
Всего: 1



ссылка откуда можно скачать мой проект здесь

>>>>>>>>>


--------------------
www.unkis.com
PM MAIL WWW   Вверх
v2v
Дата 14.4.2008, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

Репутация: 9
Всего: 56



для unkis это уже наверное не актуально . но у меня вопрос по сабжу .

данная проблема связана с атрибутом inverse=true

Цитата

What about the inverse mapping attribute? For you, and for Java, a bi-directional link is simply a matter of setting the references on both sides correctly. Hibernate however doesn't have enough information to correctly arrange SQL INSERT and UPDATE statements (to avoid constraint violations), and needs some help to handle bi-directional associations properly. Making one side of the association inverse tells Hibernate to basically ignore it,

Books Authors (many-to-many)
в классе Books  есть метод setAuthors
d классе Author есть  метод setBooks 
выходит когда я убираю этот атрибут , то могу сохранять как с одной стороны , так и с другой, но с атрибутом я могу сохранять только с одной стороны , там где в мапинге не установлено inverse=true. 




--------------------
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0488 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.