-->
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.  [ 7 posts ] 
Author Message
 Post subject: Anfängerfragen
PostPosted: Mon Dec 29, 2008 3:53 pm 
Beginner
Beginner

Joined: Mon Dec 29, 2008 3:25 pm
Posts: 20
Servus zusammen,

ich habe ein paar hibernate fragen.

ich hab die 2 klassen gemacht


Code:
   
@Entity@Table(name = "EVENT")
public class Event {

private List<Person> personen;

@ManyToMany(mappedBy = "events")
public List<Person> getPersonen() { return personen; }

public void setPersonen(List<Person> personen)
{ this.personen = personen; }



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

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

@ManyToMany(cascade={CascadeType.PERSIST, CascadeType.MERGE}) @JoinTable( name="PERSON_EVENT",
joinColumns = @JoinColumn( name="person_id"),
inverseJoinColumns = @JoinColumn( name="event_id"))
@OrderBy("title desc")

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

public void setEvents(List<Event> events) { this.events = events; }
   


1. für was genau brauch ich das mappedBy???
2.

Code:
private void addEventToPerson(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);
anEvent.getPersonen().add(aPerson);

session.getTransaction().commit();

session = HibernateUtil.getSessionFactory().getCurrentSession(); session.beginTransaction();
Event event = (Event) session.load(Event.class, eventId); System.out.println(event.getPersonen().size()); }



warum kommt hier 0 raus und nicht 1 ?????
Ich füge dem Event doch eine Person hinzu und commit es


3. wenn ich in dem hibernate.cfg.xml,das hier einfüge...


Code:
<property name="hbm2ddl.auto">create</property>
   
   

sollte er doch mit die DB neu anlegen und die alten einträge raus machen oder???macht er nicht seit ich annotaion benutze, davor mit hbm.xml files hat das geklappt... Weiß jemand warum das nicht klappt bzw. was ich falsch gemacht habe???

4. wie sag ich hibernate was für ein schema es angelegen soll... also den schema namen

Danke schon mal im vorraus für rure tips...


Top
 Profile  
 
 Post subject:
PostPosted: Thu Jan 01, 2009 9:30 am 
Beginner
Beginner

Joined: Sat Oct 18, 2008 10:25 am
Posts: 30
Hallo,

mappedBy gibt an, wer der Eigentümer einer Beziehung ist. Bei einer bidirektionalen Beziehung muss eine der beiden Seiten immer der Eigentümer sein. Hibernate informiert sich nämlich nur auf der Seite des Eigentümers, welche Änderungen an der Beziehung in der Datenbank durchgeführt werden müssen.

In deinem Fall sagst du also mit

Code:
@ManyToMany(mappedBy = "events")
public List<Person> getPersonen()
{
     return personen;
}


dass der Eigentümer dieser Beziehung Person.events ist. Die Klasse erhält Hibernate aus der get-Methode.

Die zweite Frage kann ich dir leider nicht beantworten.

Zur dritten Frage: Überprüfe mal deine Annotations noch einmal. Vielleicht liegt da ein Fehler vor.

Zur vierten Frage: Das sollte Hibernate aus den Annotations ermitteln.


Top
 Profile  
 
 Post subject:
PostPosted: Sun Jan 11, 2009 3:09 pm 
Beginner
Beginner

Joined: Mon Dec 29, 2008 3:25 pm
Posts: 20
danke dir =)


Top
 Profile  
 
 Post subject:
PostPosted: Sun Jan 11, 2009 4:41 pm 
Senior
Senior

Joined: Thu Jan 08, 2009 3:48 pm
Posts: 168
Hallo

2) Probier es mal umgekehrt mit aPerson.getEvents().add(anEvent);

3) create-drop ?
http://www.theasolutions.com/roller/kar ... ble_values

4) hibernate.default_schema

hope that helps


Top
 Profile  
 
 Post subject:
PostPosted: Sun Jan 11, 2009 8:46 pm 
Beginner
Beginner

Joined: Mon Dec 29, 2008 3:25 pm
Posts: 20
2.) ja anders herum funktioniert es wunderbar, das wusste ich ja...
wollte nur wissen warum es andersherum nicht klappt... ob es da was zu beachten gibt...

3.) das hab ich auch versucht das problem war dass der tabellenname und die klasse genau gleich waren, das machte probleme...


Top
 Profile  
 
 Post subject:
PostPosted: Mon Jan 12, 2009 2:47 am 
Senior
Senior

Joined: Thu Jan 08, 2009 3:48 pm
Posts: 168
Bei einer zweiseitigen Beziehung muss eine die Kontrolle haben, im XML ist das mit inverse=true definiert, ich vermute bei den Annotations durch das mappedBy

Man kann dann nur von der anderen Seite (in dem Fall bei Dir Person->Events) bearbeiten.

Wenn man das nicht macht kann man die Verbindung von beiden Seiten eintragen und beim speichern werden zwei gleiche Einträge in die Verbindungstabelle geschrieben (live gesehen ;o))


Top
 Profile  
 
 Post subject:
PostPosted: Mon Jan 12, 2009 6:42 am 
Beginner
Beginner

Joined: Mon Dec 29, 2008 3:25 pm
Posts: 20
hehe okay gut zu wissen =)... hab mich shcon gewundert!!!


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 7 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.