saftmeister
Nutze den Saft!
Hallo,
ich arbeite mich gerade in Hibernate ein und habe auch vor, damit eine Applikation zu bauen, die wir in der Firma einsetzen. Die Applikation soll eine bisherige mit schlechter Code-Basis ablösen.
Ich habe ein Verständnisproblem mit dem Mapping von n:1-Beziehungen. Verwendet werden Annotations, ein XML will ich nicht auch noch pflegen - das geht bequemer im Code.
Ok, konkreter Fall. Erstmal das Datenmodell.
Da es sich um eine n:1 Beziehung handelt, also viele Konditionen können einen Konditionstyp haben, es gibt aber mehrere Konditionstypen und auch mehrere Konditionen, wollte ich die OneToMany-Annotation verwenden. Aber wie genau müssen die aussehen und warum? Ich habe das Gefühl, dass ich das falsch mache. Bisher habe ich jeweils ein PO für die Tabellen erzeugt und die Assoziation so gepflegt:
Klasse Condition
Klasse ConditionType
Leider bekomme ich hier die Exception
Wenn ich es richtig verstehe, meckert Hibernate rum, das Condition.type keine Collection ist.
Ist mein Ansatz überhaupt richtig und wenn nein, wie müsste es korrekt lauten? Könnte es sein, das ich doch OneToOne verwenden muss?
Ich möchte keine komplette Erklärung, aber ein Schubs in die richtige Richtung würde mir sehr weiter helfen.
Danke und Grüße
ich arbeite mich gerade in Hibernate ein und habe auch vor, damit eine Applikation zu bauen, die wir in der Firma einsetzen. Die Applikation soll eine bisherige mit schlechter Code-Basis ablösen.
Ich habe ein Verständnisproblem mit dem Mapping von n:1-Beziehungen. Verwendet werden Annotations, ein XML will ich nicht auch noch pflegen - das geht bequemer im Code.
Ok, konkreter Fall. Erstmal das Datenmodell.
Code:
Tabelle "Condition"
- ID PK (int)
- ConditionTypeID (int) Fremdschlüssel auf ConditionType.ID
- ParameterName (string)
- ParameterValue (string)
Tabelle "ConditionType"
- ID PK (int)
- Name (string)
- DisplayName (string)
Da es sich um eine n:1 Beziehung handelt, also viele Konditionen können einen Konditionstyp haben, es gibt aber mehrere Konditionstypen und auch mehrere Konditionen, wollte ich die OneToMany-Annotation verwenden. Aber wie genau müssen die aussehen und warum? Ich habe das Gefühl, dass ich das falsch mache. Bisher habe ich jeweils ein PO für die Tabellen erzeugt und die Assoziation so gepflegt:
Klasse Condition
Java:
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL,
targetEntity = ConditionType.class)
private ConditionType type;
Klasse ConditionType
Java:
@OneToMany(fetch = FetchType.LAZY, mappedBy = "type")
@PrimaryKeyJoinColumn
private Condition condition;
Leider bekomme ich hier die Exception
Code:
org.hibernate.AnnotationException: Illegal attempt to map a non collection as a @OneToMany, @ManyToMany or @CollectionOfElements: po.Condition.type
Wenn ich es richtig verstehe, meckert Hibernate rum, das Condition.type keine Collection ist.
Ist mein Ansatz überhaupt richtig und wenn nein, wie müsste es korrekt lauten? Könnte es sein, das ich doch OneToOne verwenden muss?
Ich möchte keine komplette Erklärung, aber ein Schubs in die richtige Richtung würde mir sehr weiter helfen.
Danke und Grüße
Zuletzt bearbeitet: