JPA Annotations @ManyToMany + reihenfolge als key

Status
Nicht offen für weitere Antworten.

mephi

Bekanntes Mitglied
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.

Code:
	@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

Top Contributor
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

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

byte

Top Contributor
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

Bekanntes Mitglied
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

Mitglied
Hallo,

Meinst du vielleicht sowas:

@Entity public class Course {
...
@ManyToMany
@OrderBy("lastname ASC")
public List<Student> getStudents() {...};
...
}
@Entity public class Student {
...
@ManyToMany(mappedBy="students")
@OrderBy // PK is assumed
public List<Course> getCourses() {...};
...
}

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

Bekanntes Mitglied
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.
 
M

maki

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

byte

Top Contributor
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

Bekanntes Mitglied
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*
 
M

maki

Gast
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

Bekanntes Mitglied
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
 

mephi

Bekanntes Mitglied
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 :)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Mapping mit Annotations von 2 Tabellen Datenbankprogrammierung 22
K JPA / Hibernate Annotations Datenbankprogrammierung 4
D org.hibernate.MappingException: Unknown entity mit Annotations Datenbankprogrammierung 9
M JPA Annotations @JoinTable oder eigenes Mapping Datenbankprogrammierung 13
G [Hibernate] Map von Dates Mapping mit Annotations Datenbankprogrammierung 6
V H2 ManyToMany wie speichere ich die Daten? Datenbankprogrammierung 10
F JPA TreeStruktur mit ManyToMany Relation Datenbankprogrammierung 2
C Hibernate ManyToMany zusammengesetzter Primärschlüssel, problem. Datenbankprogrammierung 3
Y @ManyToMany Sequence angeben möglich Datenbankprogrammierung 3
J Hibernate ManyToMany Cascade Datenbankprogrammierung 2
G Hibernate ManyToMany Verknüpfung Datenbankprogrammierung 3
byte [ Hibernate ] ManyToMany Datenbankprogrammierung 3
H Tabellenspalte in JTable in der falschen Reihenfolge Datenbankprogrammierung 10
P Derby/JavaDB JPA Reihenfolge Spalten ändern Datenbankprogrammierung 6
ruutaiokwu reihenfolge der operanden bei join's Datenbankprogrammierung 5
G SQL Reihenfolge Datenbankprogrammierung 9
P DB2 Reihenfolge Create Statements Datenbankprogrammierung 2
G Oracle Speichern der Reihenfolge Datenbankprogrammierung 2
T ResultSet#next Ungültige Reihenfolge (DB2) Datenbankprogrammierung 5
D Reihenfolge der Abfragen Datenbankprogrammierung 7
R DB2 PreparedStatement Batches ungültige Reihenfolge Datenbankprogrammierung 4

Ähnliche Java Themen


Oben