Jak wyświetlić dane z tabeli w relacji many to many?

0

Posiadam dwie tabele Wykladowcy(ID, Imie) oraz Przedmioty(ID, Nazwa) oraz tabelę pośrednią w której znajdują się ID wykladowców i przypisane ID przedmiotów.
Wygenerowałem entity na podstawie tabel z bazy(Wykladowcy oraz Przedmioty), stworzyłem proste DAO z metodami add i del. Wygenerowany kod posługuje się kolekcjami np:

Collection <Wykladowcy> wykladowcyCollection

Chciałbym wyświetlić listę wykładowców wraz z przypisanymi do nich przedmiotami, jak to zrobić?

1
for(Wykladowca w : wykladowcy) { System.out.println(w.getWykladanePrzedmioty()); }

zamiana znacznika `` na <code class="java"> - @furious programming

0

Własnie próbuje w ten sposób jednak coś mi tutaj nie hula, zwraca mi ciągle nullpointerexception.

0

Wygląd DAO:

public class WykladowcyDAO {
    public void add(Wykladowcy wykladowcy){
        Session session = HibFactory.getInstance().openSession();
        Transaction tx = session.beginTransaction();
        session.saveOrUpdate(wykladowcy);
        tx.commit();
        session.close();
    }
    public void delete(int idwykladowcy){
        Session session = HibFactory.getInstance().openSession();
        Transaction tx = session.beginTransaction();
        session.delete(session.get(Wykladowcy.class, idwykladowcy));
        tx.commit();
        session.close();
    }
    public void update(Wykladowcy wykladowcy){
        Session session = HibFactory.getInstance().openSession();
        Transaction tx = session.beginTransaction();
        session.update(wykladowcy);
        tx.commit();
        session.close();
    }
    public List<Wykladowcy> getWykladowcy(){
        Session session = HibFactory.getInstance().openSession();
        Transaction tx = session.beginTransaction();
        List<Wykladowcy> lWyk = session.createQuery("from Wykladowcy").list();
        tx.commit();
        session.close();
        return lWyk;
    }
    public Wykladowcy getWykladowca(int idwykladowcy){
        Session session = HibFactory.getInstance().openSession();
        Transaction tx = session.beginTransaction();
        Wykladowcy wyk = (Wykladowcy) session.get(Wykladowcy.class, idwykladowcy);
        session.close();
        return wyk;
    }
}

Entity:

@Entity
@Table(name = "wykladowcy")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "Wykladowcy.findAll", query = "SELECT w FROM Wykladowcy w"),
    @NamedQuery(name = "Wykladowcy.findByIdwykladowcy", query = "SELECT w FROM Wykladowcy w WHERE w.idwykladowcy = :idwykladowcy"),
    @NamedQuery(name = "Wykladowcy.findByImie", query = "SELECT w FROM Wykladowcy w WHERE w.imie = :imie"),
    @NamedQuery(name = "Wykladowcy.findByNazwisko", query = "SELECT w FROM Wykladowcy w WHERE w.nazwisko = :nazwisko")})
public class Wykladowcy implements Serializable {
    @Transient
    private PropertyChangeSupport changeSupport = new PropertyChangeSupport(this);
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "idwykladowcy")
    private Integer idwykladowcy;
    @Basic(optional = false)
    @Column(name = "Imie")
    private String imie;
    @Basic(optional = false)
    @Column(name = "Nazwisko")
    private String nazwisko;
    @ManyToMany(mappedBy = "wykladowcyCollection", fetch=FetchType.EAGER)
    //private Set<Przedmioty> przedmiotySet;
    private Collection<Przedmioty> przedmiotyCollection;

    public Wykladowcy() {
    }

    public Wykladowcy(Integer idwykladowcy) {
        this.idwykladowcy = idwykladowcy;
    }

    public Wykladowcy(Integer idwykladowcy, String imie, String nazwisko) {
        this.idwykladowcy = idwykladowcy;
        this.imie = imie;
        this.nazwisko = nazwisko;
    }

    public Integer getIdwykladowcy() {
        return idwykladowcy;
    }

    public void setIdwykladowcy(Integer idwykladowcy) {
        Integer oldIdwykladowcy = this.idwykladowcy;
        this.idwykladowcy = idwykladowcy;
        changeSupport.firePropertyChange("idwykladowcy", oldIdwykladowcy, idwykladowcy);
    }

    public String getImie() {
        return imie;
    }

    public void setImie(String imie) {
        String oldImie = this.imie;
        this.imie = imie;
        changeSupport.firePropertyChange("imie", oldImie, imie);
    }

    public String getNazwisko() {
        return nazwisko;
    }

    public void setNazwisko(String nazwisko) {
        String oldNazwisko = this.nazwisko;
        this.nazwisko = nazwisko;
        changeSupport.firePropertyChange("nazwisko", oldNazwisko, nazwisko);
    }

    @XmlTransient
    /*
    public Set<Przedmioty> getPrzedmiotySet(){
        return przedmiotySet;
    }
    public void setPrzedmiotySet(Set<Przedmioty> przedmiotySet){
        this.przedmiotySet = przedmiotySet;
    }
    */
    public Collection<Przedmioty> getPrzedmiotyCollection() {
        return przedmiotyCollection;
    }

    public void setPrzedmiotyCollection(Collection<Przedmioty> przedmiotyCollection) {
        this.przedmiotyCollection = przedmiotyCollection;
    }
    

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (idwykladowcy != null ? idwykladowcy.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Wykladowcy)) {
            return false;
        }
        Wykladowcy other = (Wykladowcy) object;
        if ((this.idwykladowcy == null && other.idwykladowcy != null) || (this.idwykladowcy != null && !this.idwykladowcy.equals(other.idwykladowcy))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "bean.Wykladowcy[ idwykladowcy=" + idwykladowcy + " ]";
    }

    public void addPropertyChangeListener(PropertyChangeListener listener) {
        changeSupport.addPropertyChangeListener(listener);
    }

    public void removePropertyChangeListener(PropertyChangeListener listener) {
        changeSupport.removePropertyChangeListener(listener);
    }
    
}

Próbuje w różny sposób ostatni jaki mam zapisany

List<Wykladowcy> list = wd.getWykladowcy();
        for(int i = 0;i<list.size();i++){
            System.out.println("Wykladowca: "+list.get(i).getImie()+ " " + list.get(i).getNazwisko());
            for(Przedmioty pr : w.getPrzedmiotyCollection()){
                System.out.println(pr.getPrzedmiot());
            }
        }
1

Link coś u mnie nie hula, jak masz null pointera to możliwe, że Ci się encja nie dociąga. Spróbuj na ten moment z adnotacja FetchType.EAGER nad wykładowcami jak wtedy zacznie hulać to musisz napisać zapytanie w którym zastosujesz joina na wykładowcach.

0

Nie wiem dlaczego:(, zbyt dużo kodu aby tutaj wstawić. Okej udało mi się poradzić z tym problemem, podczepiłem to pod JTable i śmiga. Mały offtop, w jaki sposób mogę usunąć rekord z tabel bądź dodać? Oczywiście musiałoby też trafiać to do łączącej tabeli

1 użytkowników online, w tym zalogowanych: 0, gości: 1