-->
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: Wie kann man folgendes Mappen???
PostPosted: Wed Nov 16, 2005 8:12 pm 
Newbie

Joined: Wed Nov 16, 2005 7:42 pm
Posts: 6
Hallo zusammen.

Ich habe da ein Problem, wo ich nicht weiter komme.
Ich habe 3 Klassen die ich gerne über Hibernate Mappen will.

1. Klasse

public class Bestellung{
private int bestellID;
private Date bestelldatum;
//Positionen beinhaltet Elemente von der Klasse Position
private Collection positionen;

//Hier kommen die Set und Get Methoden etc
}

2. Klasse
public class Position{
private int positionID;
private String bezeichnung;
private int menge;
private float preis;
private float positionPreis;

//Extras sind Elemente von der Klasse Extra
private Collection extras;
private Collection extrasAusschuss;
//Hier kommen Set und Get Methoden;
}


3. Klasse
public class Extra{
private String name;
private int menge;
private float preis;
}


Wie kann ich nun diese 3 Klassen am besten Mappen.


Danke
Gruss
Ertan


Top
 Profile  
 
 Post subject:
PostPosted: Thu Nov 24, 2005 2:15 pm 
Newbie

Joined: Tue Oct 25, 2005 6:11 am
Posts: 5
Location: Hamburg, Germany
Hallo Ertan,

ich würde es so versuchen:

Code:
<hibernate-mapping>
   <class name="Bestellung" table="bestellung">
      <id name="id" column="bestellungID" type="int">
         <generator class="native"/>
      </id>
      <property name="bestelldatum" column="betelldatum" type="java.util.Date"/>
      <set name="positionen" inverse="true" cascade="save-update">
         <key column="bestellID"/>
         <one-to-many class="Position"/>
      </set>
   </class>
</hibernate-mapping>

<hibernate-mapping>
   <class name="Position" table="position">
      <id name="id" column="positionID" type="int">
         <generator class="native"/>
      </id>
      <property name="bezeichnung" column="bezeichnung" type="string"/>
      <property name="menge" column="menge" type="integer"/>
      <property name="preis" column="preis" type="float" />
      <property name="positionpreis" column="positionpreis" type="float"/>
      <many-to-one name="bestellung" column="bestellID" class="Bestellung" cascade="save-update" not-null="true"/>
      <set name="extras" inverse="true" cascade="save-update">
         <key column="positionID"/>
         <one-to-many class="Extra"/>
      </set>
      <set name="extrasAusschuss" inverse="true" cascade="save-update">
         <key column="positionID"/>
         <one-to-many class="Extra"/>
      </set>
   </class>
</hibernate-mapping>

<hibernate-mapping>
   <class name="Extra" table="extra">
      <id name="id" column="extraID" type="int">
         <generator class="native"/>
      </id>
      <property name="name" column="name" type="string"/>
      <property name="menge" column="menge" type="integer"/>
      <property name="preis" column="preis" type="float" />
      <many-to-one name="position" column="positionID" class="Position" cascade="save-update" not-null="true"/>
   </class>
</hibernate-mapping>


Wie das mit den Extras und ExtrasAusschuss in Position funktioniert habe ich noch nicht ausprobiert. Du brauchst dann zwei FKs von Extra zu Position.
Bei den Settern solltest du darauf achten, das du eventuelle bestehende Verbindungen vorher löst.

Ich hoffe das hilft weiter.

Torsten


Top
 Profile  
 
 Post subject:
PostPosted: Sun Nov 27, 2005 1:00 pm 
Newbie

Joined: Wed Nov 16, 2005 7:42 pm
Posts: 6
Hi Thorsten

danke für deine Antwort, aber das ist nicht genau das was ich wollte.

Die Extras haben keine ID und die Positionen auch nicht.
Leider habe ich bei Position eine positionID angeben, dies ist aber nicht der Fall.

Wie das so bei Bestellungen ist, sind die Positionen ja nicht vorher vorhanden und, wenn ich da eine positionID habe, dann muss doch die Position vorher vorhanden sein.

Ausserdem möchte ich gerne die Collection Mappings als Liste haben. Bei Set ist das so, dass beim Laden der Set die Menge nicht geordnet ist.

Wie kann ich das eigentlich realisieren.

Mein Hauptproblem ist, das wenn ich z.B eine Bestellung lösche, dass dann nicht alle Positionen mitgelöscht werden oder besser gesagt ich kann keine Bestellung löschen ohne die Positionen vorher zu löschen.
Wie kann ich das eigentlich umgehen.
Ich brauche das, weil ich eine Statischtische Analyse ertellen will von der Bestellung und wenn man die Bestellung löscht, dann ist die Analyse ungenau besser gesagt verfälscht.

Bye


Top
 Profile  
 
 Post subject:
PostPosted: Tue Nov 29, 2005 5:52 pm 
Regular
Regular

Joined: Thu Oct 27, 2005 8:06 am
Posts: 55
Location: München, Germany
Ich konzentriere mich mal auf die Beziehung zwischen Bestellung und Position; die zwischen Position und Extras geht dann analog.

1. Id bei Position

Wenn die Position keine eigene Id hat, ist Ärger vorprogrammiert. Die restlichen Attribute ergeben zusammen keinen Schlüsselkandidaten, d.h. es kann zwei Positionen mit gleichen Attributwerten geben. Die Datenbank mag das noch tolerieren (obwohl sie es streng genommen nicht sollte), aber wenn dieser (Nicht-)Schlüsselkandidat als Fremd(Nicht-)schlüssel irgendwo auftritt, ist der Bezug nicht eindeutig.

2. Die Position muß zumindest auf der Datenbank einen Fremdschlüssel der Bestellung tragen.

3. Wenn, wie ich aus der Skizze der Klassen entnehme, die Bestellung Referenzen auf die Positionen halten soll, nicht jedoch die Positionen auf die Bestellung, ist der <set...> bei der Bestellung ohne inverse="true" zu schreiben. Er ist ja nicht die Inverse einer anderen Beziehung. Als key column ist die lt. 2 nötige Fremdschlüssel-Column in der Position einzutragen.

4. Bezüglich des Sortierens vgl. Abschnitt 7.3.1 in der Hibernate Reference.

5. Bezüglich des Kaskadierens Abschnitt 11.11. Jede Kaskade, die "delete" enthält (also z.B. auch "all") sollte das Gewünschte leisten.


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.