Zdravim,

Takze mozna pomuze jak to obecne resit tento odkaz

http://en.wikibooks.org/wiki/Java_Persistence/Querying#Raw_JDBC

Cesta pres Hibernati session muze chvili pomoct. Nicmene metoda connection(), kterou ma Session je deprecated a planuje se od verze 4.0 odstranit

viz diskuze k tomu http://opensource.atlassian.com/projects/hibernate/browse/HHH-2603.

Cesta vede v pripade JPA opravodu pres getDelegate() (JPA 1.0) nebo unwrap() (JPA 2.0)

http://wiki.eclipse.org/EclipseLink/Examples/JPA/EMAPI

Tady na konci je priklad jak to resit v JPA 1 a JPA 2, pokud je na pozadi EclipseLink. Predpokladam, ze Hibernate to bude mit obdobne, akorat tam budou asi jine implementacni tridy na ktere se bude muset asi pretypovat.


=> celkove, ale pokud aplikace bezi na nejakem Java EE aplikacnim serveru, tak se doporucuje to vzit primo z neho pomoci JNDI.

Lumir Navrat

Dusan Msk wrote:
Ahoj.

S getDelegate() koncim na cast exception:
java.lang.ClassCastException: org.hibernate.ejb.EntityManagerImpl cannot be cast to org.hibernate.Session,

riesenim zda sa byt:
Session s = ((EntityManagerImpl) em.getDelegate()).getSession();

ale toho sa trosku bojim.

@Zdenek - neda sa specifikovat, o ake dotazy sa jedna. select-y cez createnativequery() pouzit dokazem, problem mam s dotazmi nevracajucimi vysledok ( napr. create table, drop index atd ... ).

Query q2 = em.createNativeQuery("create table foo ( x integer, y integer );");
q2.executeUpdate();  // exception
q2.getSingleResult(); // nedava zmysel, exception

Chapem, ze toto je nad ramec JPA. Principialne mi uplne staci moznost ziskat SQL connection a nemat ju nakonfigurovanu zvlast pre JPA a zvlast pre JDBC. Ci uz ju vytiahnut z poolu, ziskat datasource ktore pouziva JPA alebo obdobnou cestou.


Diky

Dňa 20. júla 2010 11:09, Ondra Medek <xmed...@gmail.com <mailto:xmed...@gmail.com>> napísal(-a):

    Ja pouzivam

    (Session) this.em.getDelegate();

    metodu unwrap javax.persistence.EntityManager nema. Ale take bych to
    nejprve zkusil pres createNativeQuery.

    2010/7/20 Pavel Réder <j...@ataco.cz <mailto:j...@ataco.cz>>:
    > Zkuste tohle:
    >
    > Session session = em.unwrap(Session.class);
    >
    > Pavel
    >
    >> Ahoj.
    >>
    >> Potreboval by som exec-nut cisty sql command pomocou hibernate.
    Bolo mi
    >> odporucene na to pouzit Session, co je zaroven kamen urazu.
    >>
    >> Vyrobil som EJB projekt, pridal hibernate, klasicky nakonfiguroval
    >> persistence.xml:
    >>
    >> <persistence-unit name="pu1" transaction-type="JTA">
    >> <provider>org.hibernate.ejb.HibernatePersistence</provider>
    >> <jta-data-source>jdbc/msk</jta-data-source>
    >> <properties>
    >> <property name="hibernate.hbm2ddl.auto" value="update"/>
    >> <property name="hibernate.show_sql" value="true"/>
    >> </properties>
    >> </persistence-unit>
    >>
    >> V kode ziskavam EntityManafer pomocou injection:
    >>
    >>    @PersistenceContext
    >>    private EntityManager em;
    >>
    >> Problemom ale je, ze nedokazem ziskat tu Session. Vsade na webe
    vidim
    >> new
    Configuration().configure().buildSessionFactory().openSession(), co
    >> ale
    >> hlada hibernate.cfg.xml, ktory samozrejme nemam.
    >>
    >> Trosku sa v tom pravdupovediac stracam, potrebujem teda 2
    konfiguracne
    >> subory popisujuce to iste db pripojenie?
    >> Alebo nemozem pouzivat klasicke JPA a musim ist na to inak?
    >>
    >> Diky.
    >> Dusan
    >
    >



    --
    Ondra Medek



Odpovedet emailem