Hallo Hibernate Community,
seit einiger Zeit verwende ich erfolgreich Hibernate mit Java und neuerdings auch NHibernate mit C# (Großes Lob an die Entwickler und die Community).
Ich habe leider eine etwas "unglücklich" strukturierte Datenbank vorliegen, bei der ich das Mapping nicht hinbekomme. Das Problem sind zusammengesetzte Schlüssel, die als Fremdschlüssel in einen zusammengesetzten Schlüssel einfliessen :-( (Bild mit ER-Modell konnte ich leider nicht hochladen).
Mein Generator hat mir folgende Dateien erzeugt:
LisMesswert.hbm.xml:
Code:
<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<class name="Wip.Framework.DataModels.LIS.LisMesswert,Wip.Framework.DataModels.LIS" table="LIS_MESSWERT" lazy="true" optimistic-lock="none" dynamic-update="true">
<composite-id name="Id" class="Wip.Framework.DataModels.LIS.LisMesswertId,Wip.Framework.DataModels.LIS">
<key-property name="LisAnalysemerkmalId" type="Wip.Framework.DataModels.LIS.LisAnalysemerkmalId,Wip.Framework.DataModels.LIS">
<column name="LIS_ANALYSEAUFTRAG_ID" />
<column name="LIS_MERKMAL_ID"/>
</key-property>
<key-property name="LisProbeId" column="LIS_PROBE_ID" type="Decimal" />
</composite-id>
<property name="LisLoveWertTypId" column="LIS_LOVE_ID" type="Decimal" not-null="true" />
<many-to-one name="LisLoveWertTypObj" column="LIS_LOVE_ID" cascade="none" not-null="true" />
<property name="NumWert" column="NUM_WERT" type="Decimal" not-null="false" />
<property name="AlphaWert" column="ALPHA_WERT" type="string" not-null="false" length="1024" />
<property name="ZeitWert" column="ZEIT_WERT" type="DateTime" not-null="false" />
<property name="Dimension" column="DIMENSION" type="string" not-null="false" length="16" />
<property name="Undefiniert" column="UNDEFINIERT" type="Decimal" not-null="false" />
<property name="Unplausibel" column="UNPLAUSIBEL" type="Decimal" not-null="false" />
<property name="Ungueltig" column="UNGUELTIG" type="Decimal" not-null="false" />
<property name="Manuell" column="MANUELL" type="Decimal" not-null="false" />
<property name="LisEinheitId" column="LIS_EINHEIT_ID" type="Decimal" />
<many-to-one name="LisEinheitObj" column="LIS_EINHEIT_ID" cascade="none" />
<property name="Ersatzwert" column="ERSATZWERT" type="Decimal" not-null="false" />
<property name="NumErsatzwert" column="NUM_ERSATZWERT" type="string" not-null="false" length="16" />
<property name="CalcErsatzwert" column="CALC_ERSATZWERT" type="Decimal" not-null="false" />
<property name="LisAnalyseauftragId" column="LIS_ANALYSEAUFTRAG_ID" type="Decimal" not-null="true" />
<property name="LisMerkmalId" column="LIS_MERKMAL_ID" type="Decimal" not-null="true" />
<property name="LisProbeId" column="LIS_PROBE_ID" type="Decimal" not-null="true" />
</class>
</hibernate-mapping>
LisMesswert.cs:
Code:
[Serializable]
public partial class LisMesswert : EntityBase {
#region Member Variables
protected LisMesswertId _id;
protected decimal _lisLoveWertTypId;
protected LisLove _lisLoveWertTypObj;
protected decimal? _numWert;
protected string _alphaWert;
protected DateTime? _zeitWert;
protected string _dimension;
protected decimal? _undefiniert;
protected decimal? _unplausibel;
protected decimal? _ungueltig;
protected decimal? _manuell;
protected decimal _lisEinheitId;
protected LisEinheit _lisEinheitObj;
protected decimal? _ersatzwert;
protected string _numErsatzwert;
protected decimal? _calcErsatzwert;
protected decimal _lisAnalyseauftragId;
protected decimal _lisMerkmalId;
protected decimal _lisProbeId;
#endregion
...
LisMesswertId:
Code:
[Serializable]
public partial class LisMesswertId : EntityBase {
#region Member Variables
protected LisAnalysemerkmalId _lisAnalysemerkmalId;
protected LisAnalysemerkmal _lisAnalysemerkmalObj;
protected decimal _lisProbeId;
protected LisProbe _lisProbeObj;
#endregion
...
LisAnalysemerkmal.hbm.xml
Code:
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<!--Build: with lujan99@usa.net Nhibernate template-->
<class name="Wip.Framework.DataModels.LIS.LisAnalysemerkmal,Wip.Framework.DataModels.LIS" table="LIS_ANALYSEMERKMAL" lazy="true" optimistic-lock="none" dynamic-update="true">
<composite-id name="Id" class="Wip.Framework.DataModels.LIS.LisAnalysemerkmalId,Wip.Framework.DataModels.LIS">
<key-property name="LisAnalyseauftragId" column="LIS_ANALYSEAUFTRAG_ID" type="Decimal" />
<key-property name="LisMerkmalId" column="LIS_MERKMAL_ID" type="Decimal" />
</composite-id>
...
<bag name="LisMesswertList" inverse="true" lazy="true" cascade="none">
<key>
<column name="LIS_ANALYSEAUFTRAG_ID" />
<column name="LIS_MERKMAL_ID" />
</key>
<one-to-many class="Wip.Framework.DataModels.LIS.LisMesswert,Wip.Framework.DataModels.LIS" />
</bag>
<property name="LisMerkmalId" column="LIS_MERKMAL_ID" type="Decimal" not-null="true" />
<many-to-one name="LisMerkmalObj" column="LIS_MERKMAL_ID" cascade="none" not-null="true" />
<property name="LisAnalyseauftragId" column="LIS_ANALYSEAUFTRAG_ID" type="Decimal" not-null="true" />
<many-to-one name="LisAnalyseauftragObj" column="LIS_ANALYSEAUFTRAG_ID" cascade="none" not-null="true" />
</class>
LisAnalysemerkmalId:
Code:
[Serializable]
public partial class LisAnalysemerkmalId : EntityBase {
#region Member Variables
protected decimal _lisAnalyseauftragId;
protected LisAnalyseauftrag _lisAnalyseauftragObj;
protected decimal _lisMerkmalId;
protected LisMerkmal _lisMerkmalObj;
#endregion
...
Sobald NHibernate versucht meine Klassen zu mappen, erhalte ich folgende Fehlermeldung:
Code:
Fehler beim Initialisieren von NHibernate
NHibernate.MappingException: identifier mapping has wrong number of columns: Wip.Framework.DataModels.LIS.LisMesswert type: component[LisAnalysemerkmalId,LisProbeId]
Hat schon jemand mit derartigen Schlüsseln zu tun gehabt? Bin dankbar für jede Unterstützung.
Grüße Michael