-->
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.  [ 3 posts ] 
Author Message
 Post subject: Muss ich Collections erzeugen?
PostPosted: Mon Jun 25, 2012 12:20 pm 
Newbie

Joined: Mon Jun 25, 2012 12:12 pm
Posts: 1
Hallo,

ich fange gerade mit Hibernate an. Habe mir nun mal ein paar simple Tutorials angeschaut und versuche die nun auf eigene Faust auszubauen. Kurz zu dem was ich habe: Ich habe eine Person bzw. einen Studenten und ich habe Vorlesungen. Studenten sollen beliebig viele Vorlesungen haben und Vorlesungen sollen natürlich (beliebig) viele Teilnehmer haben. Mal kurz meine Klassen dazu:

Person.java
Code:
@Entity
public class Person implements Serializable {   
   
    @Id
    @Column(name="Person_ID")
    @GeneratedValue
    private Long id;
    private String name;
    private String email;
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date geburtsdatum;
    @ManyToMany
    @JoinTable(
      name="Students_Courses",
      joinColumns={@JoinColumn(name="Person_ID", referencedColumnName="Person_ID")},
      inverseJoinColumns={@JoinColumn(name="Course_ID", referencedColumnName="Course_ID")})
    private Collection<Course> courses;

    public Person(String name, String email, Date geburtsdatum) {
        this.name = name;
        this.email = email;
        this.geburtsdatum = geburtsdatum;
    }
   
    public Person () {
       
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public Date getGeburtsdatum() {
        return geburtsdatum;
    }

    public void setGeburtsdatum(Date geburtsdatum) {
        this.geburtsdatum = geburtsdatum;
    }

    public Long getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }


Course.java
Code:
@Entity
public class Course {
   
    @Id
    @Column(name="Course_ID")
    @GeneratedValue
    private Long Id;
    private String title;
    @ManyToMany
    @JoinTable(
      name="Students_Courses",
      joinColumns={@JoinColumn(name="Course_ID", referencedColumnName="Course_ID")},
      inverseJoinColumns={@JoinColumn(name="Person_ID", referencedColumnName="Person_ID")})
    private Collection<Person> students;

    public Course(String title) {
        this.title = title;
    }
   
    public Course () {
       
    }

    public Long getId() {
        return Id;
    }

    public void setId(Long Id) {
        this.Id = Id;
    }

    public Collection<Person> getStudents() {
        return students;
    }

    public void setStudents(Collection<Person> students) {
        this.students = students;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }
}


Und hier mal meine DAOs:

PersonDAO.java

Code:
public class PersonDAO {
   
    public void createPerson(Person P) {
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        Transaction transaction = session.beginTransaction();
        session.saveOrUpdate(P);
        transaction.commit();
    }
   
    public Person getPersonById(Long id) {
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        Transaction transaction = session.beginTransaction();
        Person person = (Person) session.get(Person.class, id);
        transaction.commit();
        return person;
    }
   
    public void addCourse(Person p, Course c) {
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        Transaction transaction = session.beginTransaction();       
        p.getCourses().add(c);
        session.saveOrUpdate(p);
        transaction.commit();
    }
}


CourseDAO.java
Code:
public class CourseDAO {
    public void createCourse(Course c) {
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        Transaction transaction = session.beginTransaction();
        session.saveOrUpdate(c);
        transaction.commit();
    }
}


Und abschließend noch mein Testprogramm:

Code:
public class HibernateTutorialApplication {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        Person p = new Person("Patrick", "bla@bla.de", new Date());
        PersonDAO personDAO = new PersonDAO();
       
        personDAO.createPerson(p);
       
        Course c = new Course("Blabla 1");
       
        personDAO.addCourse(p, c);
    }
}


Nun bekomme ich allerdings an der Stelle personDAO.addCourse(p, c); eine NullPointerException welche dann auf die Zeile p.getCourses().add(c); in PersonDAO.addCourse() zurückzuführen ist. Mir ist schon klar, warum der Fehler nun auftaucht. Augenscheinlich hat Hibernate nicht wie gehofft automatisch eine Collection erstellt.

Nun zu meiner eigentlichen Frage: Ist es meine Aufgabe, die Collections in Person und Course zu initialisieren? Wenn ja, wo und wann tue ich das am Besten? Oder mache ich sonst irgendwas grundlegend falsch?

Ich hoffe Ihr könnt mir weiterhelfen.

Schöne Grüße,
Patrick


Top
 Profile  
 
 Post subject: Re: Muss ich Collections erzeugen?
PostPosted: Tue Jun 26, 2012 2:11 am 
Senior
Senior

Joined: Tue Oct 28, 2008 10:39 am
Posts: 196
Ich initialisiere alle Collections innerhalb der Entity-Klasse, dann bin ich auf der sicheren Seite. Dann kannst du auch - passendes Mapping vorausgesetzt - Person und Course gemeinsam anlegen und schickst dann nur person zum speichern und Hibernate macht den Rest mit.


Top
 Profile  
 
 Post subject: Septorinoplasti
PostPosted: Wed Jan 16, 2013 7:26 am 
Newbie

Joined: Wed Jan 16, 2013 7:21 am
Posts: 3
I have read your article, I think this is very good! Simple language, concise blog! Another kind of style! I like.The forum article very surprised to me! Your writing is good. In this I learned a lot! Thank you
----------------------------------
Septorinoplasti


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