# [Hibernate] Map von Dates Mapping mit Annotations



## Guest (11. Jan 2008)

Hallo zusammen!

Ich habe folgende Property...



```
@Sort(type=SortType.NATURAL)
	@OneToMany
	@Override
	public SortedMap<Integer, Date> getModificationDates() {
		return modificationDates;
	}
```

...und kriege folgende Fehlermeldung:

failed.org.hibernate.AnnotationException: Use of @OneToMany or @ManyToMany targeting an unmapped class: ...impl.PreparedData.modificationDates[java.util.Date]


Wie kann ich den Typ für die Map-Values festlegen? Oder gibt es eine andere Möglichkeit?


Danke im Voraus!


----------



## Guest (12. Jan 2008)

```
@CollectionOfElements
@JoinTable(name = "#1", joinColumns = @JoinColumn(name = "#2"))
@MapKey(columns = @Column(name="#3"))
@Column(name = "#4")
public SortedMap<Integer, Date> getModificationDates()


#1: Name der Join Tabelle
#2: Fremdschlüssel in der der Join Tabelle (Primärschlüssel des aktuellen Datensatzes)
#3: Key Column
#4: Value Column
```


----------



## Gast (12. Jan 2008)

Danke für die schnelle Hilfe. Es funktioniert jetzt!! Allerdings nur wenn ich statt SortedMap nur Map verwende. 
Ich bekomme beim erzeugen der Session eine NullPointerException. Wie gesagt, Googeln ergab dass es an der SortedMap liegt, weiß aber nicht wie man das hinbekommen kann.

Hat jemand eine Idee?


----------



## Guest (12. Jan 2008)

Schreibe die Annotationen bei den Attributen, nicht bei Methoden, und initialisiere alle Collections.
z.B.
	
	
	
	





```
@CollectionOfElements 
@JoinTable(name = "#1", joinColumns = @JoinColumn(name = "#2")) 
@MapKey(columns = @Column(name="#3")) 
@Column(name = "#4") 
public Map<Integer, Date> modificationDates = new SortedMap<Integer, Date>();
```


----------



## Guest (12. Jan 2008)

Vielen Dank für den Tipp!

Eine Frage hätt ich doch noch (Ja, ja ich weiß ich nerve  )

Was mach ich wenn das Value einer Map wiederum eine Liste ist?
Kann man das mit Annotationen lösen, oder muss ich die Liste in einem Entity wrappen?


```
@CollectionOfElements
	@Override		
	public Map<Integer, List<IArtefactLinkAction>> getArtefactLinkActions() {
		return artefactLinkActions;
	}
```


----------



## Guest (12. Jan 2008)

Anonymous hat gesagt.:
			
		

> Eine Frage hätt ich doch noch (Ja, ja ich weiß ich nerve  )


Ah was. Wozu ist das Forum sonst da, wenn nicht um über Problemchen zu reden? 



			
				Anonymous hat gesagt.:
			
		

> Was mach ich wenn das Value einer Map wiederum eine Liste ist?
> Kann man das mit Annotationen lösen, oder muss ich die Liste in einem Entity wrappen?


Ja, das wäre das einfachste. Alternativ kannst du Embedable mit einer Liste von IArtefactLinkAction-Instanzen 
darin verwenden.

Mach's nicht zu kompliziert. Denk immer, wie die Assoziazionen logisch zusammenhängen. Ist es Komposition
(Parent für den Lebenszyklus der Child-Objekte zuständig), reicht meist Embedable. Bei Aggregation hast du 
i.d.R. eigenständige Entities, die unabhängig von Parent-Entity verwendbar sind.


----------



## Guest (12. Jan 2008)

Ich tappe zur Zeit von einem Problem zum Nächsten  :cry: 

Habe wie oben geschrieben auf @Embeddable umbestellt wobei gilt:


```
@Entity
Class1

        @CollectionOfElements
	public Map<Integer, Class2> getClass2Data() {
		return class2data;
	}


@Embeddable
Class2

        @CollectionOfElements
	public List<Class3> getClass3Data() {
		return class3data; 
	}

@Embeddable
Class3

...
```


Ich habe nun also verschachtelte Embeddables und kriege folgenden Fehler:

nitial SessionFactory creation failed.*java.util.ConcurrentModificationException*
java.util.concurrent.ExecutionException: java.lang.ExceptionInInitializerError


Wieso?Gibt es hierfür eine Lösung?  Bin jetzt langsam am verzweifeln  ???:L 

PS: Wenn ich aus Class2 ein @Entity mache funktioniert es aber!


----------

