-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 2 posts ] 
Author Message
 Post subject: Fehler beim Mappen, oder komplett falsch verstanden ?
PostPosted: Wed Sep 20, 2006 8:33 am 
Newbie

Joined: Tue May 23, 2006 4:18 pm
Posts: 3
Hallo!

Ich hänge hier gerade an einem wirklich trivialen Problem - aber ich komme einfach nicht weiter.

Ärgert mich sehr und ich habe wirklich schon viel gesucht / geändert - aber es geht einfach nicht.

Mein Fall (in Klassen):

class Parent {
private Long parent_id ;
private Set<Child> getChildren() ;
...
}

class Child {
private Long child_id ;
private ChildType getChildType() ;
private Parent getParent() ;
...
}

class ChildType {
private Long child_type_id ;
private Set<Child> getChildren() ;
...
}

Alle IDs sind Sequenzen, müssen also durch Hibernate vergeben werden.

Meine Mappings:

<class name="Parent" table="parent">
<id name="addressId" type="java.lang.Long">
<column name="parent_id" />
<generator class="native">
<param name="sequence">parent_id_seq</param>
</generator>
</id>
<set name="childrens" inverse="true" cascade="all-delete-orphan" fetch="join">
<key>
<column name="parent_id" not-null="true" />
</key>
<one-to-many class="Child" />
</set>
...
</class>

<class name="Child" table="child">
<id name=... wie oben ....
</id>
<many-to-one name="parent" class="Parent" update="false" insert="false" fetch="select" cascade="all">
<column name="parent_id" not-null="true" />
</many-to-one>
<many-to-one name="childType" class="ChildType" update="false" insert="false" fetch="select" cascade="all">
<column name="child_type_id" length="20" not-null="true" />
</many-to-one>
...
</class>

<class name="ChildType" table="child_type">
<id name=...wie oben...
</id>
<set name="childrens" inverse="true" cascade="save-update">
<key>
<column name="child_id" length="20" not-null="true" />
</key>
<one-to-many class="Child" />
</set>
...
</class>

Was mir Probleme bereitet:

Parent parent = new Parent() ;

Child child = new Child() ;
ChildType childType = getChildTypeFromDb(...) ;

child.setChildType(childType) ;
childType.getChildren().add(child) ;

child.setParent(parent) ;
parent.getChildren().add(child) ;

session.save(parent) ;

Wirft mir eine Exception, dass in die Tabelle child keine parent_id mit null eingefügt werden kann.

Ist eigentlich klar, wenn ich mir das SQL anschaue, welches Hibernate an die Datenbank schicken will:

insert into child (child_id) values (1) ;

Das kann nicht gut gehen. :-)

Ich dachte eigentlich, Hibernate kümmert sich in solchen Fällen um die richtige Reihefolge beim insert/update (wegen all-delete-orphan, bzw. all als cascade-Eigenschaft) ?

Macht es das nicht ? Oder habe ich einen Fehler im Mapping (was dann mein Denkfehler wäre).

Wäre super, wenn einer über das lange Beispiel schauen könnte - ich bin hier fast am Durchdrehen :(

Ich hoffe ich habe beim Vereinfachen keine Tipp/Logikfehler eingebaut.

Vielen Dank !!

Gruß,
Gary


Top
 Profile  
 
 Post subject: --CLOSED-- :-)
PostPosted: Wed Sep 20, 2006 9:12 am 
Newbie

Joined: Tue May 23, 2006 4:18 pm
Posts: 3
Uärgs ... man, wie doof :-)

Ich habe den 'Fehler' gerade gefunden. Man sollte natürlich nicht update="false" insert="false" mappen, wenn man möchte, dass die Felder auch mit in die entsprechenden SQL-Statements aufgenommern werden. ^^

Einfach überlesen, da ich beim Aufräumen bin und die vom reverse-engineering übernommen Mappings nur überflogen habe.

Bleibt die Frage, warum die so erstellt wurden - aber das ist mir derzeit 'schnurz'.

Trotzdem vielen Dank fürs Lesen :-)

Gruß,
Gary


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 2 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.