Hibernate query használata több adatbázis esetén

Hibernate query használata több adatbázis esetén
2009-02-24T15:05:08+01:00
2009-02-24T15:05:10+01:00
2022-10-28T20:50:37+02:00
  • Sziasztok!

    Lenne egy problémám, amire nem találtam eddig a választ, így gondoltam megírom ide.
    Adott egy applikáció mely kétféle adatbázist támogat: Oracle és MySQL. Az adatbázis kapcsolat Hibernate-el van megoldva a "szokásos" módon: adott egy SessionFactory (Spring komponens), melynek paraméterként átadom a mapping resource file-t(XYZ.hbm.xml), mely tartalmazza a megfeleltetéseket az osztályaim és az adatbázis adott táblájának oszlopai között.
    Ebbe a file-ba szeretném elhelyezni azokat a lekérdezésket, melyeket az applikáció használ (jelenleg egy Java osztályt használok statikus String objektumokkal) és a DAO-ban gondoskodom arról, hogy a megfelelő lekérdezést (String-et) használjam attól függően, hogy melyik adatbázist használom (amit a hibernate.dialect paraméter alapján döntök el).
    A kérdésem, hogy meg tudom-e mondani a Hibernate-nek azt, hogy X nevű lekérdezés Y megvalósítását haszálja ha Oracle a DB és Z megvalósítását ha MySQL. Így a DAO-ban csak azzal kellene foglalkozonm, hogy használom az X nevű lekérdezést (session.getNamedQuery(X)), a többit a Hibernate-re hagyom.

    Egy példa, mert szerintem nem voltam túl egyértelmű:
    Adott egy lekérdezés mondjuk "queryMyName".
    A DAO-ban ezt használom : getNamedQuery("queryMyName"). Ekkor még mind a MySQL és mind az Oracle képes értelmezni és futtani a lekérdezést.
    Egy hét mólva kiderül, hogy valami baj van a lekérdezéssel, de a megoldást már különböző módon kell kódolni a MySQL script nyelvén és másképp az Oracle nyelvén. Tehát szeretném ez eddig "queryMyName"nek két megvalósítását betenni az XYZ.hbm.xml-be, de a küdot nem akarom módosítani, hanem majd a Hibernate "tudja", hogy melyiket kell kezelni attól függően, hogy milyen Dialect-t használ.

    Talán van valamilyen mód feltételes végrehajtásra? Vagy más egyéb megoldás? Nem tudom miért, de valami azt súgja, h lennie-e kell...

    A válaszokat előre is köszönöm.
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd