Основы работы с коллекцией Hibernate - PullRequest
0 голосов
/ 16 декабря 2009

Я новичок в Hibernate. У меня есть 3 таблицы: компании, профили и сайты. Отношение - одна компания имеет много профилей и сайтов (один ко многим).

<hibernate-mapping>

<class name="com.bla.dataobject.CompanyData" table="companies">
 <id name="companyId" column="company_id">
  <generator class="increment"/>
 </id>
 <property name="name" column="company_name" type="java.lang.String"/>
 <property name="description" column="company_information" type="java.lang.String"/>

 <set name="sites" table="company_sites" inverse="true" cascade="all-delete-orphan" lazy="false">
    <key column="company_id" />
    <one-to-many class="com.bla.dataobject.CompanySiteData"/>
 </set>

 <set name="profiles" table="company_profiles" inverse="true" cascade="all-delete-orphan" lazy="false">
    <key column="company_id" />
    <one-to-many class="com.bla.dataobject.CompanyProfile"/>
 </set>
</class>

<class name="com.bla.dataobject.CompanySiteData" table="company_sites">
    <id name="siteId" column="site_id">
        <generator class="increment"/>
    </id>

   <property name="siteProxySettings" column="PROXY_SETTINGS" type="java.lang.String"/>
   .................
   <property name="siteName" column="SITE_NAME" type="java.lang.String"/>


   <many-to-one name="companyData" class="com.bla.dataobject.CompanyData" column="company_id" not-null="true"/>

</class>

<class name="com.bla.dataobject.CompanyProfile" table="company_profiles">
 <id name="profileId" column="profile_id">
  <generator class="increment"/>
 </id>

 <property ............./>

 <many-to-one name="companyData" class="com.bla.dataobject.CompanyData" column="company_id" not-null="true"/>

</class>

Вставка и удаление работают просто отлично, но не обновление. У моего приложения есть сервлет Axis2 с одной стороны и спящий режим с другой. Я добавляю объект Company на уровень представления через SOAP, затемУровень представления вносит изменения в объект и запрашивает сохранение изменений (возвращенный объект back имеет идентификатор hibernate внутри). Если я просто делаю update session.update (объект), коллекция не обновляется (но только плоские параметры Компании), если я получаю сохраненный объект компании из базы данных и выполняю слияние в двух объектах (например, удаляю все коллекции и вставляю полученный, а затем обновляю исходный объект), работает, только если все элементы коллекции являются новыми (в противном случае я получаю уникальное ограничение БДна имя коллекции в таблице, которая уже существует). Поэтому мои вопросы: 1. Является ли это Right попробовать обновить "родительский объект" или нужно обновить все 3 объекта отдельно?2. Как правильно обновлять коллекции (добавлять / удалять / обновлять)

Я буду очень признателен за пример кода (который я сам не нашел) с обработкой коллекций.

Спасибомного

1 Ответ

1 голос
/ 16 декабря 2009
  1. try saveorupdate method
  2. установите hibernate.show_sql = true в конфигурации xml и проверьте информацию журнала
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...