Keresés

Új hozzászólás Aktív témák

  • modder
    aktív tag

    Sziasztok!

    Adott egy Hibernate-et és MySQL-t használó NetBeans alatt készített alkalmazás GUI-val.
    Két táblázat van benne, amiket feltöltök a perzisztens objektumokkal. A második táblázat az első detail táblája, azaz az egyik adattagja (ami Set típusú) tételeit tartalmazza.
    A lényeg az hogy ha törlök valamit a detail táblából akkor látom az SQL parancsot (delete) az output ablakban. Az SQL adatbázist megnézve látszik hogy törlődött a rekord, viszont a vizuális komponensben (jTable) nem látszik a frissítés. Természetesen újra feltöltöm a táblát, de nem frissül. Olyan mintha valahol (cache?) ott maradna az adat. Új session-t indítok minden egyes lekérdezésre, flush() és evicat() meg minden van a törlő művelet után, de nem frissül. Az output ablakban látszik hogy a select nem fut le újra, pedig ott van a lekérdezés és debugolva is ellenőriztem végrehajtja a sort, de nincs adatbázis kérés mögötte.
    Ha kilépek és újraindítom a progit akkor már minden rendben látszik.

    Hogy lehet rábírni hogy frissüljön rendben minden? Mi a francért nem frissül?

    Hogyan törölsz?
    Ha simán törlöd a detail entitást, de nem nem frissíted a parent entitás (a másik táblából) Set-jét és nem mergeled (sorry nem vágom pontosan a hibernate-es terminológiát) őt, akkor a hibernate cache úgy érzékelheti, hogy az objektumon nem történt semmi változás (a kapcsolatot csak az egyik oldalról törölted, a parent felől nem), ezért nincs oka újra lekérdezni olyan result setet mégegyszer.

    Próbáld meg, hogy a parent entitás Set-jéből törlöd a detailt, majd mergeled a parent entitást.

    Remélem ez menni fog.

  • MrSealRD
    veterán

    Sziasztok!

    Adott egy Hibernate-et és MySQL-t használó NetBeans alatt készített alkalmazás GUI-val.
    Két táblázat van benne, amiket feltöltök a perzisztens objektumokkal. A második táblázat az első detail táblája, azaz az egyik adattagja (ami Set típusú) tételeit tartalmazza.
    A lényeg az hogy ha törlök valamit a detail táblából akkor látom az SQL parancsot (delete) az output ablakban. Az SQL adatbázist megnézve látszik hogy törlődött a rekord, viszont a vizuális komponensben (jTable) nem látszik a frissítés. Természetesen újra feltöltöm a táblát, de nem frissül. Olyan mintha valahol (cache?) ott maradna az adat. Új session-t indítok minden egyes lekérdezésre, flush() és evicat() meg minden van a törlő művelet után, de nem frissül. Az output ablakban látszik hogy a select nem fut le újra, pedig ott van a lekérdezés és debugolva is ellenőriztem végrehajtja a sort, de nincs adatbázis kérés mögötte.
    Ha kilépek és újraindítom a progit akkor már minden rendben látszik.

    Hogy lehet rábírni hogy frissüljön rendben minden? Mi a francért nem frissül?

    Lehet, hogy nem pont ez kell neked, de amennyire nem látunk a kódból semmit, annyira talán ez is jó lehet: [link]

    Egyébként gondold végig.
    Mi a jTable adatforrása? Elvileg azon objektumok halmaza( valamilyen kollekció) melyeket a hibernate-en keresztül kezelsz és az adatbázis táblák rekordjainak feleltethetőek meg...

    Akkor most jön a kérdés...Pontosan honnan is törölted? (Ha a hibernate és a DB látja...) De a jTable nem...

  • skoda12
    aktív tag

    Sziasztok!

    Adott egy Hibernate-et és MySQL-t használó NetBeans alatt készített alkalmazás GUI-val.
    Két táblázat van benne, amiket feltöltök a perzisztens objektumokkal. A második táblázat az első detail táblája, azaz az egyik adattagja (ami Set típusú) tételeit tartalmazza.
    A lényeg az hogy ha törlök valamit a detail táblából akkor látom az SQL parancsot (delete) az output ablakban. Az SQL adatbázist megnézve látszik hogy törlődött a rekord, viszont a vizuális komponensben (jTable) nem látszik a frissítés. Természetesen újra feltöltöm a táblát, de nem frissül. Olyan mintha valahol (cache?) ott maradna az adat. Új session-t indítok minden egyes lekérdezésre, flush() és evicat() meg minden van a törlő művelet után, de nem frissül. Az output ablakban látszik hogy a select nem fut le újra, pedig ott van a lekérdezés és debugolva is ellenőriztem végrehajtja a sort, de nincs adatbázis kérés mögötte.
    Ha kilépek és újraindítom a progit akkor már minden rendben látszik.

    Hogy lehet rábírni hogy frissüljön rendben minden? Mi a francért nem frissül?

    Kod nelkul nehez megmondani, hogy mi a baj, de nem nyelsz el egy catch agban egy exceptiont, ami nincs kiloggolva?

    "Új session-t indítok minden egyes lekérdezésre"

    Ez anti-pattern. Mivel desktop approl van szo, gondolom csak egy user hasznalja egyszerre. Boven eleg akkor nyitni uj sessiont, ha az elozo inkonzisztens allapotba kerul.

Új hozzászólás Aktív témák