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]