# JPA Annotations @ManyToMany + reihenfolge als key



## mephi (4. Dez 2008)

Hi,

steh jetzt wieder vor einem kleinen Problem. Ich habe 2 Klassen. Sequence und Event. Die beiden haben eine ManyToMany Beziehung. Jede Sequence hat eine Liste mit Events. Hier ist aber die Reihenfolge wichtig. Wie bring ich die da am besten rein. Mein Konzept für Java war es einfach die Reihenfolge in der ArrayList zu nehmen. Nur wie geb ich das per Annotations an?
Habs mal mit einer Map versucht, allerdings find ich das nicht so praktisch um dann in Java eventuell die Reihenfolge zu ändern.


```
@ManyToMany(targetEntity=EventImpl.class)
	@JoinTable(inverseJoinColumns=@JoinColumn(name="event_id"))
	Map<Integer, IEvent> eventMap = new HashMap();
```

zumal ich hier auch nicht weiß wie ich den key der map in der DB ändere..


----------



## byte (4. Dez 2008)

Beim Mappen von Lists benutzt Hibernate entweder Bag- oder List-Semantik, je nachdem ob Du mit @IndexColumn mappst oder nicht. Bag-Semantik sollte man in den meisten Fällen vermeiden.
Wenn Du @IndexColumn benutzt, dann persistiert Hibernate die Reihenfolge Deiner Liste, indem er den Index der Elemente in einer Spalte speichert. Den Namen der Spalte gibst Du als Attribut in @IndexColumn an.


----------



## mephi (4. Dez 2008)

Kennt nur Hibernate @IndexColumn?
Finde das hier http://www.oracle.com/technology/pr...urces/toplink-jpa-annotations.html#JoinColumn nämlich nicht

wenn möglich wäre ich gern kompatibel mit den anderen frameworks


----------



## byte (4. Dez 2008)

@IndexColumn ist JPA.

Edit: Kommando zurück, ist doch Hibernate only.


----------



## mephi (4. Dez 2008)

schade, gibts noch einen anderen weg? wäre sehr nice wenn ich mit minimalem aufwand auf ein anderes framework wechseln könnte


----------



## byte (4. Dez 2008)

Hab mich nie um eine andere Lösung bemüht, da Hibernate bei mir gesetzt ist. Vielleicht findet sich ja ein TopLink Experte, der dazu was sagen kann...

Kann Dir aber gleich sagen, dass das nur eine von einigen Stellen ist, wo man mit reinem JPA an seine Grenzen stößt. Hibernate bietet sehr viele Erweiterungen, die durch JPA nicht spezifiziert sind.


----------



## mephi (4. Dez 2008)

Hoffentlich findet sich jemand der sich da auskennt. Ich finde dazu auch nichts. Aber würde mich wundern wenn ein Standard so einen Fall nicht beachten würde.


----------



## klarkimming (4. Dez 2008)

Hallo,

Meinst du vielleicht sowas:



> @Entity public class Course {
> ...
> @ManyToMany
> @OrderBy("lastname ASC")
> ...



Ist aus der JPA Doku. (wuerde das nicht an die Methoden schreiben sondern an die Attribute...)

EDIT:

ps: @IndexColumn funktionert uebrigens auch mit "JPA" oder anders ausgedrueckt es ist moeglich Hibernate und JPA Annotations zu mischen...


----------



## mephi (4. Dez 2008)

hm, das geht nicht da ich nach positionsnummern sortieren möchte die in jeder sequence anders sein können und ein event kann auch in einer sequence öfter vorkommen.


----------



## maki (4. Dez 2008)

Das Feature ist für JPA 2.0 geplant, man muss bedenken das 1.0 meist etwas "lückenhaft" ist.


----------



## byte (4. Dez 2008)

klarkimming hat gesagt.:
			
		

> @IndexColumn funktionert uebrigens auch mit "JPA" oder anders ausgedrueckt es ist moeglich Hibernate und JPA Annotations zu mischen...


Aber wenn Du von Hibernate auf eine andere JPA Implementierung umschwenkst, dann funktionierts halt nicht mehr. Mit @IndexColumn bist Du an Hibernate gebunden.

@OrderBy wird in bestimmten Fällen ignoriert, nämlich wenn man eigene Queries baut (z.B. per HQL bei Hibernate). Ansonsten gäbs noch die Lösung mit @Sort und einem Set, aber auch das ist ne Hibernate Annotation + Sets sind in Bezug auf ORMs teilweise eklig (Stichwort equals/hashcode und Lazy Loading).


----------



## mephi (4. Dez 2008)

hmm, dann werd ich versuchen dass mit einer map zu lösen. dann muss ich mir halt beim löschen von elementen aus der map noch ne kleine funktion schreiben um die anderen elemente aufzurücken.

oder auf jpa 2.0 warten *g*


----------



## maki (4. Dez 2008)

Im  Moment (1.0) kann kann nicht vernünftig mit JPA entwickeln, ohne sich auf eine Implementierung festzulegen, alles andere wird "schräg" imho, da der Standard eben noch so Lückenhaft ist.


----------



## mephi (4. Dez 2008)

Wann soll denn 2.0 kommen? Ich finde nur Infos dazu, dass EclipseLink die Referenzimlpementierung dafür wird, aber nicht wie weit sie sind oder ähnliches


----------



## maki (4. Dez 2008)

2.0 kommt zusammen mit JEE 6, weiss jetzt nicht genau wann.


----------



## mephi (4. Dez 2008)

ok danke für die hilfe 
falls noch jemand eine bessere lösung als ne map einfällt, dann bin ich immer offen dafür


----------

