-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 4 posts ] 
Author Message
 Post subject: ManyToMany-Beziehung mit JoinTable und Index-Column auflöse
PostPosted: Thu Aug 09, 2007 8:06 am 
Beginner
Beginner

Joined: Wed Jul 18, 2007 6:13 am
Posts: 28
LÖSUNG FÜR DAS ERSTE PROBLEM HABE ICH SELBST GEFUNDEN UND STEHT WEITER UNTEN. HABE JETZT ABER NOCH EIN PROBLEM BEI DER ONETOMANY-BEZIEHUNG.

Vorab, wollte ich mich erstmal bei allen bedanken, die sich meinen Problemen gewidmet haben. Ist echt ein tolles Forum hier!

Bei der Umstellung von XDoclets auf Annotations habe ich jetzt jedoch noch 2 Probleme. Dann habe ich (hoffentlich) alles geschafft :-)
Ich werde in naher Zukunft auch weiterhin das Forum besuchen, vielleicht kann ich ja auch noch jemanden helfen ;-)

Nun zu meinem Problem:

Ich muss folgende XDoclet-Sprache übersetzen:
/**
* @hibernate.list table="PERSON_ADRESSE" cascade="none"
* access="field"
* @hibernate.collection-many-to-many column="FK_ADRESSE"
* class="XYZ"
* @hibernate.collection-key column="FK_PERSON"
* @hibernate.collection-index column="SORT_INDEX"
*/

Mit anderen Worten: Es existiert eine unidirektionale ManyToMany Beziehung zu der Klasse XYZ. Diese Beziehung soll aufgelöst werden, indem eine neue Tabelle ("PERSON_ADRESSE") erstellt wird, die 2 Fremdschlüssel besitzt ("FK_ADRESSE" und "FK_PERSON"), sowie eine Index-Column ("SORT_INDEX")

Das auflösen der ManyToMany-Beziehung bekomme ich ohne Probleme hin. Das würde folgendermaßen aussehen. Habe es an einem einfachen Beispiel gemacht (siehe weiter unten).

Die Tabelle "PERSON_ADRESSE" soll also 3 Spalten haben.
FK_ADRESSE, FK_PERSON und SORT_INDEX

Aber wie bekomme ich das mit der Index-Column hin?
Habe schon folgendes probiert:

@ManyToMany(targetEntity=XYZ.class)
@AccessType("field")
@JoinTable(name="PERSON_ADRESSE",
joinColumns=@JoinColumn(name="PERSON_FK"),
inverseJoinColumns=@JoinColumn(name="ADRESSE_FK"))
@Index(name="SORT_INDEX")
Collection<Adresse> adressen;

@ManyToMany(targetEntity=XYZ.class)
@AccessType("field")
@JoinTable(name="PERSON_ADRESSE",
joinColumns=@JoinColumn(name="PERSON_FK"),
inverseJoinColumns=@JoinColumn(name="ADRESSE_FK"))
@IndexColumn(name = "SORT_INDEX")
Collection<Adresse> adressen;

Aber da generiert er mir nichts :-(

Weiß jemand wie das funktioniert?

Klasse Person

@Entity
@Table(name = "PERSON")
public class Person {

@Id
@Column(name = "PK_ID")
int id;

@Column(name = "VORNAME")
String vorname;

@Column(name = "NACHNAME")
String nachname;


@ManyToMany(targetEntity=XYZ.class)
@AccessType("field")
@JoinTable(name="PERSON_ADRESSE",
joinColumns=@JoinColumn(name="PERSON_FK"),
inverseJoinColumns=@JoinColumn(name="ADRESSE_FK"))
Collection<Adresse> adressen;


public Collection<Adresse> getAdressen() {
return adressen;
}

public void setAdressen(Collection<Adresse> adressen) {
this.adressen = adressen;
}

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getNachname() {
return nachname;
}

public void setNachname(String nachname) {
this.nachname = nachname;
}

public String getVorname() {
return vorname;
}

public void setVorname(String vorname) {
this.vorname = vorname;
}

}

Klasse Adresse

@Entity
@Table(name = "ADRESSE")
public class Adresse {

@Id
@Column(name = "ID")
int id;

@Column(name = "STRASSE")
String strasse;

@Column(name = "HAUSNUMMER")
String hausnummer;

@Column(name = "PLZ")
int plz;

public String getHausnummer() {
return hausnummer;
}

public void setHausnummer(String hausnummer) {
this.hausnummer = hausnummer;
}

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public int getPlz() {
return plz;
}

public void setPlz(int plz) {
this.plz = plz;
}

public String getStrasse() {
return strasse;
}

public void setStrasse(String strasse) {
this.strasse = strasse;
}

}


Ein ähnliches Problem habe ich übrigens bei folgendem XDoclet-Tag:

/**
* @hibernate.collection-one-to-many class="XYZ"
* @hibernate.collection-key
* @hibernate.collection-key-column name="FK_HISTORIE"
* @hibernate.collection-index column="SORT_INDEX"
*/

Aber ich denke das ähnelt dem obigen Problem.


Last edited by ak4784 on Tue Aug 21, 2007 7:18 am, edited 1 time in total.

Top
 Profile  
 
 Post subject:
PostPosted: Tue Aug 21, 2007 7:17 am 
Beginner
Beginner

Joined: Wed Jul 18, 2007 6:13 am
Posts: 28
Habe die Lösung für die ManyToMany-Lösung gefunden.

So siehts aus:

@ManyToMany(targetEntity=XYZ.class)
@CollectionOfElements
@JoinTable(name="PERSON_ADRESSEE",
joinColumns=@JoinColumn(name="P_FK"),
inverseJoinColumns=@JoinColumn(name="A_FK"))
@IndexColumn(name="TEST")
List<Adresse> adressen;


Jetzt möchte ich etwas ähnliches mit einer OneToMany-Beziehung erreichen.
Der Unterschied besteht jedoch nun darin, dass Hibernate mir nicht eine neue Tabelle, so wie im vorherigen Beispiel mit JoinTable erstellen soll, sondern in der Tabelle zu der die Beziehung steht, eine Index-Column eingefügt werden soll.

Nochmal an einem einfachen Beispiel erklärt:

Tabelle A hat eine OneToMany-Beziehung zu Tabelle B

Tabelle A
Spalte: Name
Spalte: Vorname

Tabelle B
Spalte: Strasse
Spalte: Adresse
Spalte: TEST --> Index-Column


Ich habe bereits folgendes ausprobiert:

@CollectionOfElements
@OneToMany(targetEntity=Unidirektional_OneToMany.Adresse.class)
@IndexColumn(name="TEST")
List<Adresse> adressen;

Aber hierbei erzeugt Hibernate mir eine neue Tabelle mit 2 Foreign Keys und der Index-Column. Aber genau das möchte ich nicht. Wie eben schon beschrieben soll Hibernate mir in der Tabelle zu der ich die Beziehung habe eine Index-Columnerstellen und keine neue Tabelle erstellen.

Hat vielleicht von euch jemand eine Idee? W


Top
 Profile  
 
 Post subject:
PostPosted: Fri Aug 24, 2007 7:53 am 
Beginner
Beginner

Joined: Wed Jul 18, 2007 6:13 am
Posts: 28
Für die OneToMany-Beziehung habe ich es jetzt auch gefunden.

Ich habe das JoinColumn vergessen:

So muss es aussehen:

@OneToMany(targetEntity = XYZ.class)
@JoinColumn(name = "FK_@TABLE_WORKFLOW_STEUERUNG")
@IndexColumn(name = "SORT_INDEX")


Top
 Profile  
 
 Post subject:
PostPosted: Fri Aug 24, 2007 7:53 am 
Beginner
Beginner

Joined: Wed Jul 18, 2007 6:13 am
Posts: 28
Für die OneToMany-Beziehung habe ich es jetzt auch gefunden.

Ich habe das JoinColumn vergessen:

So muss es aussehen:

@OneToMany(targetEntity = XYZ.class)
@JoinColumn(name = "BlaBla")
@IndexColumn(name = "SORT_INDEX")


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 4 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.