# Hibernate Mapping Beispiel?



## Romsl (16. Mai 2005)

Hi,

kann mir jemand der es auch versteht mal ein HibernateMapping Beispiel hier mit den dazugehörigen Beans angeben?

Und zwar sollte es folgendes können:

SystemLocale enthält Set an Title, AcademicTitle und Country. Jetzt soll z.B. beim Löschen eines Title die zugehörige SystemLocale nicht gelöscht werden. Aber beim Löschen der SystemLocale sollen alle Title, AcademicTitle und Country cascadierend mitgelöscht werden.

Mein versuch:

SystemLocale:


```
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"
 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
    <class name="ebooking.module.base.bean.system.SystemLocale" table="BASE_SYSTEM_LOCALE">
        <id name="id" type="long">
            <column name="ID" not-null="true"/> 
            <generator class="increment"/>
        </id>

        <property name="key" type="string" unique="true">
            <column name="LOCALE_KEY" not-null="true"/>
        </property>

        <property name="language" type="string">
            <column name="LANGUAGE" not-null="true"/>
        </property>

        <property name="countryName" type="string">
            <column name="COUNTRY_NAME" not-null="true"/>
        </property>

        <set name="titles" table="BASE_SYSTEM_TITLE" inverse="true" cascade="save-update" lazy="true" sort="ebooking.module.base.hbm.HibernateComparator">
            <key column="SYSTEM_LOCALE_KEY" property-ref="key"/>
            <one-to-many class="ebooking.module.base.bean.system.Title"/>
        </set>

        <set name="academicTitles" table="BASE_SYSTEM_ACADEMIC_TITLE" inverse="true" cascade="save-update" lazy="true" sort="ebooking.module.base.hbm.HibernateComparator">
            <key column="SYSTEM_LOCALE_KEY" property-ref="key"/>
            <one-to-many class="ebooking.module.base.bean.system.AcademicTitle"/>
        </set>

        <set name="countries" table="BASE_SYSTEM_COUNTRY" inverse="true" cascade="save-update" lazy="true" sort="ebooking.module.base.hbm.HibernateComparator">
            <key column="SYSTEM_LOCALE_KEY" property-ref="key"/>
            <one-to-many class="ebooking.module.base.bean.system.Country"/>
        </set>
    </class>
</hibernate-mapping>
```

Title:


```
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"
 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
    <class name="ebooking.module.base.bean.system.Title" table="BASE_SYSTEM_TITLE">
        <id name="id" type="long">
            <column name="ID" not-null="true"/>
            <generator class="increment"/>
        </id>

        <property name="key" type="string">
            <column name="TITLE_KEY" length="100" not-null="true"/>
        </property>

        <property name="name" type="string">
            <column name="NAME" length="100" not-null="true"/>
        </property>

        <many-to-one name="systemLocale" column="SYSTEM_LOCALE_KEY" property-ref="key" class="ebooking.module.base.bean.system.SystemLocale" cascade="save-update" not-null="true"/>
    </class>
</hibernate-mapping>
```

der Rest ist dito.

Ich bekomm jedesmal eine Exception:


```
org.springframework.orm.hibernate3.HibernateObjectRetrievalFailureException: deleted object would be re-saved by cascade (remove deleted object from associations): [ebooking.module.base.bean.system.SystemLocale#1]; nested exception is org.hibernate.ObjectDeletedException: deleted object would be re-saved by cascade (remove deleted object from associations): [ebooking.module.base.bean.system.SystemLocale#1]
	org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:605)
	org.springframework.orm.hibernate3.HibernateTransactionManager.convertHibernateAccessException(HibernateTransactionManager.java:570)
	org.springframework.orm.hibernate3.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:482)
	org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:401)
	org.springframework.transaction.interceptor.TransactionAspectSupport.doCommitTransactionAfterReturning(TransactionAspectSupport.java:256)
	org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:67)
	org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:144)
	org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:174)
	$Proxy1.deleteSystemLocaleBySystemLocaleKey(Unknown Source)
	ebooking.module.base.controller.SystemLocaleController.deleteSystemLocaleForm(SystemLocaleController.java:79)
	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	java.lang.reflect.Method.invoke(Method.java:324)
	org.springframework.web.servlet.mvc.multiaction.MultiActionController.invokeNamedMethod(MultiActionController.java:351)
	org.springframework.web.servlet.mvc.multiaction.MultiActionController.handleRequestInternal(MultiActionController.java:305)
	org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:128)
	org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:44)
	org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:675)
	org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:623)
	org.springframework.web.servlet.FrameworkServlet.serviceWrapper(FrameworkServlet.java:384)
	org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:344)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
```

oder irgendetwas mit not owner of session ....


----------



## Romsl (18. Mai 2005)

Schade, findet sich niemand der mir helfen kann? Es würde mir auch schon ein Beispiel das in diese Richtung geht reichen.

Gruß

Romsl


----------



## Romsl (18. Mai 2005)

Ich bin bald am Verzweifeln. Ich finde keine Beispiele, das meinem Problem annähernd entspricht.


----------



## Thomas Darimont (18. Mai 2005)

Hallo!

Ich schaus mir heute Abend vielleicht mal an...

Gruß Tom


----------



## Romsl (18. Mai 2005)

Danke Dir, dass du dich meiner animmst


----------



## Thomas Darimont (18. Mai 2005)

Hallo!

Hast du's schonmal mit

```
<set name="titles" table="BASE_SYSTEM_TITLE" inverse="true" cascade="all" lazy="true" sort="ebooking.module.base.hbm.HibernateComparator">
            <key column="SYSTEM_LOCALE_KEY" property-ref="key"/>
            <one-to-many class="ebooking.module.base.bean.system.Title"/>
        </set>
```

und 

```
<many-to-one name="systemLocale" column="SYSTEM_LOCALE_KEY" property-ref="key" class="ebooking.module.base.bean.system.SystemLocale"  not-null="true"/>
```

versucht?

Gruß Tom


----------



## Romsl (18. Mai 2005)

Hi Thomas,

ja das habe ich versucht. Aber leider werden nicht alle Title und AcademicTitle aus der Datenbank (die mit dem SystemLocale.key verknüpft sind) gelöscht. Genauer gesagt wird jeweils immer nur einer gelöscht. Sie haben aber alle den selben FK.

Komischerweise funktioniert das ganze mit Country, aber nicht mit Title und AcademicTitle.

Gruß und vielen Dank

Romsl


----------



## Romsl (18. Mai 2005)

Hallo an Alle die mir vergeblich versucht haben zu helfen,

@Thomas: Ich habe zu sort den HibernateComparator verwendet. Aber leider nicht in Title und AcademicTitle das zugehörige interface angegeben.
Hibernate meckert komischerweise nicht.

Gibt es eine angemessene Strafe für ein solch fahrlässiges vergehen?

Danke ihr seid die Besten


----------

