Anfänger fragen zu Hibernate

  • Themenstarter Themenstarter NooB1990
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
N

NooB1990

Gast
Hallo zusammen,

Ich lese mich grad in Hibernate ein und habe ein paar Fragen.
Ich habe eine Klasse Person und Event und dazu ein hbm.xml file
Ich möchte mehrere Events ind der Klasse person auf nehmen
in dem hibernate tutorial ist nur beschrieben wie es mit einem Set geht ich würde aber gerne eine Liste haben
das hier hab ich versucht geht aber nicht
Code:
		<list name="events" table="PERSON_EVENT">
        <key column="PERSON_ID"/>
        <many-to-many column="EVENT_ID" class="event.Event"/>
		</list>

public List<Event> getEvents()
{...
}
er sagt den befehl list kennt er nicht... Weiß jemand wie die richtige syntay lautet??

Dann hab ich die ganze Sache mit Annotiations versucht


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

    private Long id;
    private List<Event> events = new ArrayList<Event>();

	
	@ManyToMany(cascade = CascadeType.ALL)
	 @JoinTable(
            name="PERSON_EVENT",
            joinColumns = @JoinColumn( name="person_id"),
            inverseJoinColumns = @JoinColumn( name="event_id")
    )
    public List<Event> getEvents() {
		return events;
	}
	@Id@GeneratedValue
    public Long getId() {
		return id;
	}

da hab ich ich ein paar Fragen zu den Beziehungen...
1. was genau macht das mappedBy??
Und wo wurde der foreign key festgelegt??
Beispiel:

Code:
@Entity
public class Troop {
    @OneToMany(mappedBy="troop")
    public Set<Soldier> getSoldiers() {
    ...
}

@Entity
public class Soldier {
    @ManyToOne
    @JoinColumn(name="troop_fk")
    public Troop getTroop() {
    ...
}

2. zu der JoinTabelle
Code:
	@ManyToMany(cascade = CascadeType.ALL)
	    @JoinTable(
            name="PERSON_EVENT",
            joinColumns = @JoinColumn( name="person_id"),
            inverseJoinColumns = @JoinColumn( name="event_id")
    )

    public List<Event> getEvents() {
		return events;
	}

Was macht des CascadeType ???
Also ich habe jetzt doch eine Join tabelle angelegt, die PERSON_EVENT heißt und
2 Spalten hat (person_id und event_id)

so jetzt hab ich eine methode geschrieben
Code:
 private void addPersonToEvent(Long personId, Long eventId) {

        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        session.beginTransaction();

        Person aPerson = (Person) session.load(Person.class, personId);
        Event anEvent = (Event) session.load(Event.class, eventId);

        aPerson.getEvents().add(anEvent);

        session.getTransaction().commit();
    }

warum kann eine person mehrmals das gleiche event bekommen????
wenn ich das hier 5 aufrufe addPersonToEvent(new Long(1), new Long(1));
hat die person 1 5 * das event 1
warum normal sollte das nicht gehen weil in der JOIN_TABELLE der zusammen gesetzte Schlüssel doch die beiden pk von person und event sind oder?

danke schonmal im vorraus :###
 
ok für die mapping syntax hab ich die Lösung gefunden
Code:
		<list name="events" cascade="all" table="PERSON_EVENT">
            <key column="person_id"/>
            <index column="idx"/>
        <many-to-many column="EVENT_ID" class="event.Event"/>
        </list>

die anderen probleme/fragen stehen noch 😛..
 
hi noob,

leider kann ich dir zu deinen fragen keine antwort geben. habe im gegenzug dazu aber noch eine frage zu deiner list-lösung. 😉

und zwar habe ich eine bidirektionale m:n-beziehung. zwei tabellen und eine zwischentabelle in der db. und du hast jetzt die zwischentabelle mit diesem list-ding gemappt oder wie muss ich das verstehen? überall werden m:n-beziehungen immer nur mit annotations erklärt, aber die verwende ich überhaupt nicht. ich hatte es so probiert:

Code:
<hibernate-mapping>
	 <class name="package.beans.table1_table2" table="table1_table2">
		 <composite-id mapped="true" name="table1_table2">
		 	<key-property name="id1" type="integer" column="id1" />
		 	<key-property name="id2" type="integer" column="id2" />
		 </composite-id>
	</class>
</hibernate-mapping>

und erhalte diese meldung:

[ERROR] - HibernateFactorySimple.java:39:
static initializer - Error creating SessionFactory.
org.hibernate.InvalidMappingException: Could not parse mapping document from resource table1_table2.hbm.xml

is also klar, dass mein mapping nicht so hinhaut. aber ich raffs nicht und die doku dazu hab ich noch nicht "gefunden" [/ironie]. 😉

über ne hilfestellung würd ich mich sehr freuen!

lieben dank + grüße
pusteblume
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben