# [Hibernate] Map in Map - Wie sieht Mapping Datei aus?



## SebiB90 (9. Mrz 2007)

Hi,
also ich hab eine Map besser gesagt TreeMap in einer anderen TreeMap drin. also so

```
private TreeMap<Integer, TreeMap<Integer, String>> timetable = new TreeMap<Integer, TreeMap<Integer, String>>();
```

nur wie sieht jetzt die Mappingdatei von Hibernate aus?
habs bisher so:

```
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
  <class name="schoolplaner.Timetable" table="TIMETABLES">
    <id name="id" column="TIMETABLE_ID">
      <generator class="native"/>
    </id>
    <property name="effectivWith" type="timestamp"/>
    <map name="timetable">
      <key column="id">
      <map-key type="int">
      
    </map>
  </class>
</hibernate-mapping>
```
was muss da jetzt an die stelle hin?


----------



## SebiB90 (10. Mrz 2007)

hat niemand ne idee?
ich les schon ganze zeit die documentation durch, aber ich find irgendwie nichts  (oder überseh es nur weil mein englisch nicht so gut ist)


----------



## KSG9|sebastian (11. Mrz 2007)

Als Workaround könntest du als Value ne one-to-one bzw one-to-many nehmen, welche auf ne andere Tabelle/Klasse verweist. Diese Klasse wiedrum erweitert dann deine Map.


```
<map name="timetable"> 
     <key column="id"> 
     <map-key type="int"> 
     <one-to-many class="MapAdapter"/>  
</map>
```
Klasse MapAdapter muss wiederum von Hash/Tree/XYMap erben und entsprechend gemappt werden.
Aber hast du es mal direkt versucht:

```
<map name="timetable"> 
     <key column="id"> 
     <map-key type="int"> 
     <map table="inner_map_table">
         <key column="inner_map_id"> 
         <map-key type="int"> 
        
     </map>
</map>
```


----------



## KSG9|sebastian (11. Mrz 2007)

Wenn ich kurz Zeit hab werd ich's nochma testen..irgendwie muss das gehen, aber bei solchen Fragen ist die Hibernate-Doku immer recht spärlich 
Sonst frag mal im Hibernate Userforum (nach Möglichkeit im Englischen  )


----------



## SlaterB (11. Mrz 2007)

was genau ist eigentlich dein Ziel?

Datenbanken kennen nur Tabellen als unsortierte Listen, willst du eine Map in der DB bauen?
speichere und lade die Einträge doch ganz normal als
Eintrag [Key, Value]

die Map baust du dann in Java auf und ab,
Anfragen beziehen sich auf die Listen-Form

lass das DB-Objekt ein DBMap<KeyClass,ValueClass>- oder auch DBMapInMap<KeyClass,<KeyClass,ValueClass>-Interface implementieren,
dann brauchst du nur einmalig allgemeine Umbau-Operationen


----------



## SebiB90 (11. Mrz 2007)

Also ich hab jetzt auch in Hibernate Forum geschrieben, aber nur ins deutsche... mal sehen was da kommt.
wäre nett, wenn du es aber nochmal ausprobieren würdest.

@SlaterB
Also was ich vor hab ist ein Stundenplan(timetable) darzustellen. Der erste Key ist der Tag (hab ich jetzt mal durch Zahlen dargestellt, daher könnte ich auch ne liste nehmen aber das prob bestünde immer noch). Der Key in der inneren Map ist die Stunde und das Value ist das Unterrichtsfach(Subject).


----------



## SebiB90 (11. Mrz 2007)

so habs nochmal ins englische geschrieben
und auch schon ne antwort bekommen:


> Collections in Collections are not supported. If you hit this limitation it's usually an indicator of a wrong domain model that will be a nightmare to use.


ich weiß zwar nicht was genau ein domain model ist, aber ich werd es dann wohl anders lösen müssen.
vllt sollte ich die datenbank struktur konstruieren und dazu dann die java klassen...


----------



## SlaterB (11. Mrz 2007)

domain-Model sind die Java-Klassen die du abbilden willst,
Map von Map klingt jetzt nicht ganz nach Nightmare, aber zumindest nach Riesenaufwand,

wenn du nur an Map, List und Set denkst, dann sind das in zwei Dimensionen schon neun Kombinationen,
das kann doch nicht alles Hibernate machen..

da muss man nicht groß neustrukturieren, 
das ist einfach eine höhere logische Einheit, die im Programm bei Bedarf aus 
einer einfachen Tabelle aufgebaut werden muss,
bisschen Arbeit, aber dafür überschaubar


----------



## kama (11. Mrz 2007)

Hallo,



			
				SebiB90 hat gesagt.:
			
		

> Hi,
> also ich hab eine Map besser gesagt TreeMap in einer anderen TreeMap drin. also so
> 
> ```
> ...


habe da nur mal eine Frage, warum Du Dich noch mit den XML Mapping Dateien rumschlägst, Du benutzt doch Java 1.5, dann kannst Du doch auch Annotations verwenden?

MfG
Karl Heinz Marbaise


----------



## SebiB90 (11. Mrz 2007)

wie funktioniert denn das?


----------



## KSG9|sebastian (12. Mrz 2007)

Schau dir die Hibernate Annotations an. Anstatt .hbm.xml-Dateien hast du Annotations, also so Dinger wie z.B.

@Entity

oder

@Id 

u.s.w.
Ich arbeit aber gerner mit XML-Dateien, da man dadurch eine bessere Übersicht hat. Aber jedem das Seine


----------

