-->
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.  [ 11 posts ] 
Author Message
 Post subject: Vererbung, hbm2java, hbm2ddl
PostPosted: Wed Aug 24, 2005 8:00 am 
Newbie

Joined: Wed Aug 24, 2005 6:35 am
Posts: 4
Location: Austria
Hallo!

Ich habe folgende Klassenhirachie:
Code:
public abstract Großvater { Attribute von GVater }

public abstract Vater extends Großvater { Attribute von Vater }

public Kind1 extends Vater { Attribute von Kind1 }

public Kind2 extends Vater { Attribute von Kind2 }

public Kind3 extends Vater { Attribute von Kind3 }

Soweit ist ja noch alles ganz trivial. Die Tabelle in der DB muss wie folgt aussehen:
Code:
+------------------------+
|  Vater                 |
+------------------------+
|  Attribute von Kind 1  |
|  Attribute von Kind 2  |
|  Attribute von Kind 3  |
|  Attribute von Vater   |
|  Attribute von GVater  |
|  discriminator         |
+------------------------+

Mein Problem besteht nun darin, dass ich mit hbm2java auf der einen Seite mir die Klassen in der oben angeführten Form generieren will und auf der anderen Seite diese Tabelle haben möchte.
Ich habe bis jetzt schon alles möglich ausprobiert (subclass, union-subclass, join, etc.) ohne jedoch auf das gewünscht Ergebnis zu kommen.

Danke schonmal,

gekko - using Hibernate3


Top
 Profile  
 
 Post subject:
PostPosted: Fri Sep 02, 2005 4:33 am 
Pro
Pro

Joined: Fri Sep 02, 2005 4:21 am
Posts: 206
Location: Vienna
Hallo,

Also ganz ehrlich: deine Vererbungshierarchie ist zumindest sehr fragwürdig. Seit wann kann man einfach sagen ein Kind IS-A Vater and IS-A Großvater?
Ein Kind HAS-A Vater und HAS-A Großvater. Weiters: was passiert, wenn ein Kind4 dazukommen sollte?

Dein Beispiel schreit daher eher danach mit Komponenten (Component) gelöst zu werden bzw. mit einem flexibleren Datenmodell.

Sorry, wenn dies nicht sehr hilfreich sein sollte, aber manchmal sollte man einfach sein Problem noch einmal durchgehen, bevor man Kopfstände machen muss, um es zu lösen.

Erik


Top
 Profile  
 
 Post subject:
PostPosted: Mon Sep 05, 2005 1:55 am 
Newbie

Joined: Wed Aug 24, 2005 6:35 am
Posts: 4
Location: Austria
Ich kann weder das Datenmodell noch das Schema ändern. Bei mir kommt leider der ungünstige Fall zu tragen, dass beide Seiten bereits existieren und nun in die "Mitte" das Mapping reingelegt werden muss.
Ich gebe zu, das Beispiel mit Vater, Kind etc. von den Namen her nicht sehr geschickt gewählt zu haben. Andererseits kann man sich die Klassenhirachie recht gut Vorstellen, ganz im Gegensatz dazu wenn Klassen lediglich A, B, C, usw. ganannt werden.
Bei einem 4ten Kind müsste die Tabelle lediglich um Spalten, in der die neuen Attribute von Kind4 gespeichert werden können, erweitert werden.


Top
 Profile  
 
 Post subject:
PostPosted: Mon Sep 05, 2005 1:58 am 
Hibernate Team
Hibernate Team

Joined: Mon Aug 25, 2003 9:11 pm
Posts: 4592
Location: Switzerland
Ich weiss nicht was Erik jetzt daran so komisch findet, aber das ist eine ganz normale Vererbungshierarchie. IS-A natuerlich, denn mit HAS-A waere es Delegation, keine Vererbung. Die Tabelle sieht auch relativ "normal" aus, soweit man das denormalisierte Modell von "table per hierarchy" als normal bezeichnen kann. Ganz einfaches Mapping, wie in jeder Hibernate Dokumentation, mit <subclass> oder <union-subclass>.


Top
 Profile  
 
 Post subject:
PostPosted: Mon Sep 05, 2005 2:02 am 
Hibernate Team
Hibernate Team

Joined: Mon Aug 25, 2003 9:11 pm
Posts: 4592
Location: Switzerland
Korrektur: Nicht <union-subclass>, einfach nur <subclass> und ein <discriminator>.


Top
 Profile  
 
 Post subject:
PostPosted: Mon Sep 05, 2005 2:09 am 
Pro
Pro

Joined: Fri Sep 02, 2005 4:21 am
Posts: 206
Location: Vienna
Hallo,

christian wrote:
Ich weiss nicht was Erik jetzt daran so komisch findet, aber das ist eine ganz normale Vererbungshierarchie.

Komisch finde ich es nicht - nur bedenklich. Es ist sicher nicht wert viel darüber zu diskutieren - aber ich bin vom Liskov substitution principle beschädigt ;-) und wenn ich sehe, dass ein Kind ein Großvater bzw. ein Vater IST, dann wird mir kurz schwarz vor den Augen. Kann man aber ruhig als mein Problem betrachten.

Und wenn sowieso
gekko wrote:
Ich kann weder das Datenmodell noch das Schema ändern.

ist das alles nur Philosophie.

Versprochen: ich melde mich erst wieder zu Wort, wenn ich eine Lösung anbieten kann :-).

Erik


Top
 Profile  
 
 Post subject:
PostPosted: Mon Sep 05, 2005 2:47 am 
Hibernate Team
Hibernate Team

Joined: Mon Aug 25, 2003 9:11 pm
Posts: 4592
Location: Switzerland
Quote:
ein Kind ein Großvater bzw. ein Vater IST, dann wird mir kurz schwarz vor den Augen.


Ja, wie soll Vererbung denn sonst funktionieren? Das ist doch der Sinn der Sache.


Top
 Profile  
 
 Post subject:
PostPosted: Mon Sep 05, 2005 2:48 am 
Hibernate Team
Hibernate Team

Joined: Mon Aug 25, 2003 9:11 pm
Posts: 4592
Location: Switzerland
Random Google hit: http://cnx.rice.edu/content/m11709/latest/


Top
 Profile  
 
 Post subject:
PostPosted: Mon Sep 05, 2005 3:05 am 
Pro
Pro

Joined: Fri Sep 02, 2005 4:21 am
Posts: 206
Location: Vienna
Hallo,

Also ich habe nicht vor, das ABC von OO hier zu machen. Soviel nur mehr:
ist es so dass jedes Kind ein Vater bzw. ein Großvater ist?

Wer ja antwortet, hat ein seltsames Bild von der Welt.

Erik


Top
 Profile  
 
 Post subject:
PostPosted: Mon Sep 05, 2005 3:46 am 
Hibernate Team
Hibernate Team

Joined: Mon Aug 25, 2003 9:11 pm
Posts: 4592
Location: Switzerland
Ich glaube Du nimmst "Vater" und "Kind" einfach woertlich. Versuchs doch mal mit "Tier", "Hund". Der OP hat "Vater" und "Kind" nur verwendet um die Typhierarchie auszudruecken, nicht um einen Instanz-Baum zu beschreiben.


Top
 Profile  
 
 Post subject:
PostPosted: Mon Sep 05, 2005 4:34 am 
Pro
Pro

Joined: Fri Sep 02, 2005 4:21 am
Posts: 206
Location: Vienna
Hallo,

christian wrote:
Ich glaube Du nimmst "Vater" und "Kind" einfach woertlich. Versuchs doch mal mit "Tier", "Hund". Der OP hat "Vater" und "Kind" nur verwendet um die Typhierarchie auszudruecken, nicht um einen Instanz-Baum zu beschreiben.

Schon klar - ist meines Erachtens aber nicht OO. Ich kann damit leben/akzeptieren, dass es andere so machen. Ist (es gibt sehr sehr viel Litteratur zu diesem Thema) gefährlich, wenn man nicht aufpasst. Mehr wollte ich nicht sagen.

Erik


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 11 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.