Hallo,
ich habe eine Klasse Person und eine Klasse Eerignis (Ereignis ist eine Unterklasse von Information, Information hat noch weitere Unterklassen).
Ein Ereignis besteht hauptsächlich aus einem Datum, einem Ort und einer Notiz.
Person hat ein Attribute
Code:
Map ereignisse;
wobei die Keys Strings sind, die die Art des Ereignisses beschreiben (Geburt, Taufe, Tod, Einschulung, Schulabschluss, ...) und die Values sind Instanzen von Ereignis.
Jetzt möchte ich das ganze in die Datenbank bringen und habe folgende Definitionen
Code:
<class name="Person" table="personen">
<id name="id" type="integer">
<column name="id" />
<generator class="assigned" />
</id>
[...]
<map name="ereignisse"
table="person_ereignis">
<key column="ind_id"/>
<map-key column="ereignistyp" type="string"/>
<one-to-many class="Ereignis"/>
</map>
</class>
und
Code:
<class name="Information"
table="informationen" discriminator-value="I">
<id name="id" type="integer">
<column name="id" />
<generator class="native" />
</id>
<discriminator column="typ" type="string"/>
<subclass name="Ereignis"
discriminator-value="E"/>
</subclass>
</class>
Wenn ich eine neue Person erfasse und in die Datenbank saveOrUpdate
möchte, bekomme ich die Exception
Quote:
03.09.2005 12:32:00 org.hibernate.event.def.AbstractFlushingEventListener performExecutions
SCHWERWIEGEND: Could not synchronize database state with session
org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: Event
at org.hibernate.engine.ForeignKeys.getEntityIdentifierIfNotUnsaved(ForeignKeys.java:216)
at org.hibernate.type.EntityType.getIdentifier(EntityType.java:99)
at org.hibernate.type.ManyToOneType.nullSafeSet(ManyToOneType.java:63)
at org.hibernate.persister.collection.AbstractCollectionPersister.writeElement(AbstractCollectionPersister.java:652)
at org.hibernate.persister.collection.AbstractCollectionPersister.recreate(AbstractCollectionPersister.
...
Hat mir jemand eine Idee, wie ich es anders umseten könnte.
In der Dokum habe ich
Code:
<dynamic-component name="userAttributes">
<property name="foo" column="FOO"/>
<property name="bar" column="BAR"/>
<many-to-one name="baz" class="Baz" column="BAZ_ID"/>
</dynamic-component>
gefunden. Aber ich werde daraus nicht so ganz schlau: Was ist da jetzt der Key der Map?
Für einen Tip dankbar ist,
Michael