Jak zrobić update/zmianę danych?

0

W jaki sposób mogę zapisać zmiany do rekordu
Mam tabelę w której są kolumny: ID, Przedmiot
I chciałbym zmienić np. ID:17 na ID:16 w jaki sposób można to zrobić?
Mam klasę DAO oraz Entity w których są gettery i settery.

public class PrzedmiotyDAO {
    public void add(Przedmioty przedmioty){
        Session session = HibFactory.getInstance().openSession();
        Transaction tx = session.beginTransaction();
        session.saveOrUpdate(przedmioty);
        tx.commit();
        session.close();
    }
    public void delete(int idprzedmioty){
        Session session = HibFactory.getInstance().openSession();
        Transaction tx = session.beginTransaction();
        session.delete(session.get(PrzedmiotyDAO.class, idprzedmioty));
        tx.commit();
        session.close();
    }
    public void update(Przedmioty przedmioty){
        Session session = HibFactory.getInstance().openSession();
        Transaction tx = session.beginTransaction();
        session.update(przedmioty);
        tx.commit();
        session.close();
    }
    public List<Przedmioty> getPrzedmioty(){
        Session session = HibFactory.getInstance().openSession();
        Transaction tx = session.beginTransaction();
        List<Przedmioty> lPrz = session.createQuery("from Przedmioty").list();
        tx.commit();
        session.close();
        return lPrz;
    }

}
0

Najpierw pobierasz z bazy obiekt np po id, ktory chcesz uaktualnic i potem wykonujesz metode update session, gdy na obiekcie wykonales zmiany.

0

Właśnie tak myślałem, tylko jak to zrobić? Myślałem o dodaniu w klasie PrzedmiotyDAO metody getPrzedmiot, która będzie mi to pobierać ale czy to jest dobre wyjście?
Podpinam to pod GUI i gdzieś wyczytałem, że w sumie tym powinien się zająć EntityManager czy to prawda?

0

A czemu nie? W repo ustawiasz metody dostępu, które Cię interesują i jeśli potrzebujesz metodę zwracającą unikalny obiekt np. po id to taka metoda musi się tam pojawić np. getPrzedmiot(int id). Z podobnej metody korzystasz w metodzie delete gdzie masz : session.get(PrzedmiotyDAO.class, idprzedmioty) - to nic innego jak właśnie pobranie obiektu na podstawie ID - jeśli zrobisz własną metodę tego typu to odnosisz się potem w metodzie update do niej - czyli najpierw pobierasz, potem ustawiasz i na końcu wykonujesz transakcje. Nie wykonujesz sesji na podstawie EntityManagera (w powyższym przykładzie ), żeby to zrobić używasz JPA, a tutaj korzystasz z Hibernate i jego session. Przy pisaniu aplikacji dobrze wydzielić sobie konkretne warstwy wykonujące konkretne zadania - jeśli zaczniesz się uczyć Springa i JEE zrozumiesz i w tym przypadku masz encje, wyżej robisz repo zapytań do bazy, wyżej logikę serwisów i wyżej wygląd - tak w skrócie.

0

Dziękuję za odpowiedź!
Uczę się i strasznie mozolnie mi to idzie:(
Dodałem do DAO metodę

    public Przedmioty getPrzedmiot(int idprzedmioty){
        Session session = HibFactory.getInstance().openSession();
        Transaction tx = session.beginTransaction();
        Przedmioty pr = (Przedmioty) session.get(Przedmioty<del>DAO</del>.class, idprzedmioty);
        <del>tx.commit();</del>
        session.close();
        return pr;
    }

W okienku po wciśnięciu buttona próbuję ciągle to jakoś dodać jednak nie bardzo mi wychodzi.

        int row = jTable1.getSelectedRow();
        Przedmioty p = new Przedmioty();
        pd.getPrzedmiot(row);
        try {
            p.setIdprzedmioty(Integer.valueOf((String) jTextField2.getText()));
            p.setPrzedmiot(jTextField1.getText());
            pd.update(p);
            tableUpdate();
        } catch (Exception e) {
        }

dodanie znacznika <code class="java"> - @furious programming

0

Poprawiłem DAO teraz nie sypie błędami.
Jeszcze jeden problem mam bo jak radziłeś zmieniłem parę rzeczy.

        int row = jTable1.getSelectedRow();
        Przedmioty p = new Przedmioty();
        pd.getPrzedmiot(Integer.valueOf((String) jTable1.getValueAt(row, 0)));

        try {
            p.setIdprzedmioty(Integer.valueOf(jTextField2.getText()));
            p.setPrzedmiot(jTextField1.getText());
            pd.update(p);
            tableUpdate();
        } catch (Exception e) {
        }

Mogę zmienić nazwę ale nie ID dlaczego?

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