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