Java Hibernate XML Mapping mit ArrayLists

JenZor

Lt. Commander
Registriert
Aug. 2011
Beiträge
1.190
Hallo zusammen,

das hier ist mein erstes Thema im Programmieren Unterforum *schüchtern zur Tür reinschau*

Dann mal mein Problem:

Kann ich, wenn ja wie, folgende Struktur per XML Mapping in Hibernate umsetzen?

Code:
class foo {
  
   /* andere Integer, String, Double Attribute */
   ArrayList<Type1a> bar1_1;
   ArrayList<Type1b> bar1_2;
   // ...
   ArrayList<Type2a> bar2_1;
   ArrayList<Type2b> bar2_2;
   // ... 
}

// je eine Klasse für alle n = {a,b,...}
class Type1n extends superT1 {

   /* andere Integer, String, Double Attribute */
  ArrayList<Type2n> bar2;
}

// je eine Klasse für alle n = {a,b,...}
class Type2n extends superT2 {

   /* weitere Integer, String, Double Attribute */
}

abstract class superT1 {
   
   Integer id;
   Date date;
   /* Integer, String, Double Attribute */
}

abstract class superT2 {

   /* Integer, String, Double Attribute */
}


Wenn ich mir via google schnell mal ein paar Beispiele für Hibernate Mapping anschaue, dann stelle ich fest, dass die meisten List<T> oder Set<T> nutzen um one-to-many Realtion zu modellieren.
Auf ArrayList<T> will ich aber nicht unbedingt verzichten, da ich sonst den Vorteil von
Code:
ArrayList<T>.get(int i)
verliere und ich keinen Bock habe, alles auf List<T> oder Set<T> umzuprogrammieren.

Kann ich die vorhandene Struktur trotzdem "wie gewohnt" mappen? Und einfach in der *.hbm.xml die Sets definieren?
Mit der Vererbung habe ich mich schon auseinander gesetzt, das sollte nicht das Problem werden. Eher ob es Hibernate "egal" ist ob es Set<T> / List<T> oder Spezialisierungen davon verwendet.


Evtl. habe ich die Modellierung auch einfach nur verkackt und könnte die geschickter hinbekommen, dazu müsste ich aber wohl präziser werden, was ich vorhabe. Ich will erstmal den Hibernate Fall abdecken und würde später die Modellierung nochmal überdenken. Ist ja auch ein unmöglicher Aufwand, alles nochmal um zu modeln.

Ich hoffe ihr könnt mir trotzdem iwie helfen und versteht, was ich meine.



Gruß

J.
 
List ist ein Interface, dass die Methode get(int) zu Verfügung stellt. ArrayList implementiert dieses Interface. Von daher sehe ich kein Problem, diese zu verwenden. Du kannst genau so gut auch LinkedList nehmen, je nach Anwendungsfall.
Du solltest nach Möglichkeit auch alle Listen entsprechend als List<T> deklarieren, sofern nicht ArrayList-spezifische Methoden benötigt werden. Das spart dir eine Menge Arbeit, solltest du mal auf einen anderen Listentyp umstellen.

Ansonsten kann ich dir bzgl. Hibernate nicht weiter helfen.
 
Hmm, danke Darlis, aber das hilft mir nur mäßig weiter.

Ich bin jetzt dazu übergegangen die Datenstrukturen doch zu überarbeiten. Habe auch auf List<T> umgestellt,
im prinzip läuft es jetzt wie vorher. Jetzt kümmer ich mich mal um das Mapping!

Dafür finde ich ja genügend Beispiele im Netz.


Scheint hier ja nicht son verbreitetes/ beliebtes Thema zu sein, auch wenn Hibernate extrem praktisch ist.


Gruß

J.
 
Naja, Hibernate ist eigentlich schon wieder out. :)
Wir verwenden auch Hibernate in einem Projekt, das hat aber eher historische Gründe. Heute würde ich eher zu DataNucleus (JPOX) greifen, oder eventuell zu OpenJPA.

Dass hier nicht so viele auf die Frage geantwortet haben, liegt vermutlich daran, dass das eventuell etwas zu high-level für viele hier ist. Zahlreiche Antworten auf Fragen, die über das standard J2SE gehen, sollte du lieber nicht erwarten. ;)
 
Zuletzt bearbeitet:
@SheepShaver und Bauergiesen: Danke für die Antworten.

Frage an SheepShaver: Warum ist Hibernate wieder out? Was kann denn JPOX was Hibernate nicht kann? Muss gestehen von JPOX hab ich noch nie was gehört :D.

Mal googlen..^^
 
... Idee verworfen, die Frameworks die hinter deisem ORM stecken sind alle bald größer als das Projekt selbst. Werde dass Etwas anders lösen und mir ne eigene kleine schlanke API zurechtschustern.


Trotzdem danke für die Hilfe


Kann zu gemacht werden!
 
Zurück
Oben