-->
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.  [ 4 posts ] 
Author Message
 Post subject: Erfahrungen mit "tiefer" Vererbung und Hibernate
PostPosted: Sun Jul 30, 2006 6:19 am 
Beginner
Beginner

Joined: Thu Jul 20, 2006 12:08 pm
Posts: 21
Location: Germany
Hallo zusammen,

ich arbeite seit ca. 1/2 Jahr mit Hibernate. Die Projekte, die ich bis jetzt implementiert habe , haben eine recht flache Vererbungsstruktur mit sagen wir mal 2 Stufen :

Klasse a ( abstract )

Klasse b ( implementiert Klasse a )

Klasse c ( extends Klasse c ).

Nun habe ich ein Projekt mit teilweise bis zu 5 Stufen Vererbungstiefe. Ist hier eine Verwendung von Hibernate empfehlenswert ?
Ich soll eine Aussage über die Machbarkeit machen und den Aufwand, den das Projekt benötigt.

Hat hier im Forum jemand Erfahrungen mit solch gearteten Projekten ?
Welche Abbildungen der Klassen hat er gewählt ( Tabelle je Klassenhierarchie, Tabelle je konkreter Klasse, Tabelle je Klasse ) ?
Macht eine "Tabelle je Klassenhierarchie" Abbildung bei einer Vererbungstiefe von 5 Stufen Sinn oder was wäre da empfehlenswert ?

Viele Grüße

Ferdinand


Top
 Profile  
 
 Post subject:
PostPosted: Sun Jul 30, 2006 4:45 pm 
Newbie

Joined: Tue Mar 28, 2006 9:31 pm
Posts: 13
Quote:
Nun habe ich ein Projekt mit teilweise bis zu 5 Stufen Vererbungstiefe. Ist hier eine Verwendung von Hibernate empfehlenswert ?


Klar meiner Meinung nach spricht überhauptnichts dagegen.
5 Ebenen Vererbungshierachie sind auch nicht gerade viel.


Quote:
Hat hier im Forum jemand Erfahrungen mit solch gearteten Projekten ?
Welche Abbildungen der Klassen hat er gewählt ( Tabelle je Klassenhierarchie, Tabelle je konkreter Klasse, Tabelle je Klasse ) ?



Also ich benutze die Strategie "Tabelle je Klasse", ich markiere einfach die Unterklasse mit:

@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)

das wars schon , sehr schön ich mag hibernate(annotations) :-)


Am besten du programmierst dir ein einfaches Beispiel und testet es daran aus.(Notfalls mach ich das wenn ich etwas Zeit habe ^^- mußte sagen)


Top
 Profile  
 
 Post subject: Habe das gleiche Problem/ die gleiche Herrausforderung
PostPosted: Fri Mar 14, 2008 4:39 pm 
Newbie

Joined: Thu Mar 06, 2008 7:27 pm
Posts: 2
Hallo liebe Hibernate-Gemeinschaft,

ich bin noch relativ neu auf dem Gebiet Hibernate.
In unserer Firma suchen wir momentan auch ein Persistenzframework für die Umgebung .NET.

Bisher habe ich in diesem Bereich (NHibernate 1.2.1.GA) nur ein paar "Dummyprogramme" erstellt.

Nun geht es bei mir auch um tiefere Vererbungsstrukturen im Zusammenhang mit Attributes (In Java Annotations). Hierbei stoße ich momentan leider auf Probleme.

Ich besitze 3 Persistenzklassen:

- Entity
- Person
- Natürliche Person

Als Speicherstrategie will ich die join Strategie verfolgen, da mir diese Strategie von dem Gesichtspunkt der Normalisierung am besten gefällt.

Meine Entity Klasse hat den folgenden Aufbau:

Code:
    [NHibernate.Mapping.Attributes.Class]
    public class Entity
    {
        private Int64 id;

        /// <summary>
        /// Zentral vergebene ID aus der Datenbank
        /// </summary>
        [NHibernate.Mapping.Attributes.Id(0,TypeType=typeof(Int64))]
           [NHibernate.Mapping.Attributes.Generator(1, Class="uuid.hex")]
        public virtual Int64 Id
        {
            get
            {
               return this.id;
            }
            set
            {
                this.id = value;
            }
        }


Meine Personenklasse:

Code:
    [NHibernate.Mapping.Attributes.JoinedSubclass(ExtendsType = typeof(Entity))]
    [NHibernate.Mapping.Attributes.Key(Column = "Id")]
    public class Person : NHibernateSecoundTrys.Businessobjects.Entity
    {
        /*
        private IList<Kommunikationsadresse> kommunikationsadressen;

        internal virtual IList<Kommunikationsadresse> Kommunikationsadressen
        {
            get
            {
                return this.kommunikationsadressen;
            }
            set
            {
                this.kommunikationsadressen = value;
            }
        }
         */
        private string testfeld;
        [NHibernate.Mapping.Attributes.Property(TypeType=typeof(String))]
        public virtual string Testfeld
        {
            get
            {
                return this.testfeld;
            }
            set
            {
                this.testfeld = value;
            }
        }


Meine Natürliche Personenklasse:
Code:
    [NHibernate.Mapping.Attributes.JoinedSubclass(ExtendsType = typeof(Personenverwaltung.Person))]
    [NHibernate.Mapping.Attributes.Key(Column = "Id")]
    public class NatuerlichePerson : Person
    {
        private string nachname;
        private string vorname;
        private DateTime geburtstag;
        private string geburtsort;

        [NHibernate.Mapping.Attributes.Property(TypeType = typeof(String))]
        internal virtual string Nachname
        {
            get
            {
                return this.nachname;
            }
            set
            {
                this.nachname = value;
            }
        }
        [NHibernate.Mapping.Attributes.Property(TypeType = typeof(String))]
        internal virtual string Vorname
        {
            get
            {
                return this.vorname;
            }
            set
            {
                this.vorname = value;
            }
        }
        internal virtual DateTime Geburtstag
        {
            get
            {
                return this.geburtstag;
            }
            set
            {
                this.geburtstag = value;
            }
        }
        [NHibernate.Mapping.Attributes.Property(TypeType = typeof(String))]
        internal virtual string Geburtsort
        {
            get
            {
                return this.geburtsort;
            }
            set
            {
                this.geburtsort = value;
            }
        }
    }


Zum speichern verwende ich die Methode:
Code:
session.SaveOrUpdate( item );


Als Fehlermeldung erhalte ich:
Code:
identifier type mismatch
Parametername: id


Wie müsste dieses Beispiel geändert werden damit es funktioniert? Kann mir hier jemand weiterhelfen?


Eine weitere Frage:
Können die beiden Klassen Entity und Person auch ohne Problem abstrakt sein? Oder gibt es hier Einschränkungen?

Viele Grüße
Guido[/code]


Top
 Profile  
 
 Post subject: Lösung
PostPosted: Sat Mar 22, 2008 5:44 pm 
Newbie

Joined: Thu Mar 06, 2008 7:27 pm
Posts: 2
Hallo mein Problem hatte nix mit einer tiefen Vererbung zu tun sondern eher damit, dass ich einen falschen Datentyp bei dem ID-Feld verwendet habe.

Mit den Datentypen String funktioniert es wunderbar.

Viele Grüße
Guido Leibbrand


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