Announcement

Collapse
No announcement yet.

persistence toplink: entitymanager + relationale derby db

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • persistence toplink: entitymanager + relationale derby db

    Hallo

    Ich entwickle ein kleines Projekt in NetBeans.
    Ich benutze toplink um die derby DB zu handlen. Mittels einer Bean im ejb projekt füge ich in der tabelle "Modules" ein modul hinzu welches als fremdschlüssel einen "Teacher" benötigt (createModule(...) ). Eine andere Methode (getModules(...) ) dieser Bean soll dann alle Module eines Teacher in einer Collection zurückliefern. Das funktioniert aber nicht - es werden alle bestehenden Module ausser des neu hinzugefügten zurückgeliefert. Die Module bestehen aber in der DB und nach einem Projektneustart werden sie auch zurückgeliefert.

    Kann mir da jemand weiterhelfen?

    Achja: glaube nicht, dass das eine Rolle spielt, aber ich greife über Servlets auf die Bean zu.

    Code:
    @Entity
    @Table(name = "TEACHER")
    @NamedQueries(...)
    public class Teacher implements Serializable, UniversityMember {
    private static final long serialVersionUID = 1L;

    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "TEACHER_ID", nullable = false)
    private Integer teacherId;

    @Column(name = "NAME", nullable = false)
    private String name;

    @Column(name = "PW", nullable = false)
    private String pw;

    @OneToMany(mappedBy = "fkTeacher", cascade = CascadeType.ALL, fetch=FetchType.EAGER)
    private Collection<Modules> modulesCollection;

    //getter und setter methoden
    }

    @Entity
    @Table(name = "MODULES")
    @NamedQueries(...)
    public class Modules implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "MODULE_ID", nullable = false)
    private Integer moduleId;

    @Column(name = "NAME", nullable = false)
    private String name;

    @Column(name = "DESCRIPTION")
    private String description;

    @JoinColumn(name = "FK_TEACHER", referencedColumnName = "TEACHER_ID")
    @ManyToOne
    private Teacher fkTeacher;

    //getter und setter methoden
    }

    @Stateless
    public class ChooseModulesBean implements ChooseModulesLocal {

    @PersistenceContext
    private EntityManager em;

    public void createModule(String name, String description, int fkTeacher) throws ChooseModulesException {
    try{
    Modules module = null;
    Teacher teacher = em.find(Teacher.class, fkTeacher);

    module = new Modules(name);
    module.setFkTeacher(teacher);
    if(description.length()>0){
    module.setDescription(description);
    }

    em.persist(module);
    em.flush();
    }catch(Exception e){
    throw new ChooseModulesException("module could not be created." + e.getMessage());
    }
    }

    public Collection<Modules> getModules(Teacher teacher) throws ChooseModulesException{
    try{
    em.flush();
    Teacher teacherManaged = em.merge(teacher);


    //in diesem Moment besteht das Modul schon in der DB, die Collection enthält das neu hinzugefügt Modul aber nicht
    Collection<Modules> modules = teacherManaged.getModulesCollection();


    Iterator iM = modules.iterator();
    Modules m = null;
    while(iM.hasNext()){
    m = (Modules) iM.next();
    }

    return teacherManaged.getModulesCollection();

    }catch(Exception e){
    throw new ChooseModulesException("modulecollection not be returned" + e.getMessage());
    }
    }
    }
Working...
X