2010-11-19 16 views
3

Eski hazırda okunur kodu, Hazırda EntityManager (JPA uygulaması) kullanan yeni projedeJPA, Hibernate SQLQuery.addScalar() ile eşdeğer mi?

session.createSQLQuery("SELECT * FROM CATS") 
.addScalar("ID", Hibernate.LONG) 
.addScalar("NAME", Hibernate.STRING) 
.addScalar("BIRTHDATE", Hibernate.DATE) 

gibi bir şey kullanır.

Bu addScalar() çağrılarına eşdeğer var mı? Daha önce yaptığım gibi döndürülen sütun türlerini belirtmem gerekir mi?

Örneğin, addScalar kullanmazsam SQL sorgu sonuçları önbelleğe alınır mı?

cevap

1

Tam olarak aynı şeyi arıyordum ve JPA'da hiçbir şey bulamadım. ,

kene size sqlquery doğrudan döküm olamayacağıdır:

Vay, 6 ay o yardımcı olur olmadığını

Bilmiyorum :) cevap ve ama geçici bir çözüm bulduk HibernateQuery'ye gitmeniz, ardından getHibernateQuery'yi çağırmanız ve sonucu SQLQuery'ye göndermeniz gerekir.

val sql = "select distinct story as story from ..."; 
val q: Query = getEntityManager().createNativeQuery(sql); 
//hello nasty hack 
q.asInstanceOf[HibernateQuery].getHibernateQuery().asInstanceOf[SQLQuery].addScalar("story", StandardBasicTypes.LONG); 
//next, caching 
q.setHint("org.hibernate.cacheable", true); 
q.setHint("org.hibernate.cacheRegion", "query.getTopLinks"); 

çirkin ama iş :)

+0

bir fikrin değiştirebilirsiniz bunu hazırda bekletmeyen bir jpa sağlayıcısıyla mı yapıyorsunuz? – vikingsteve

2

sonrası Hibernate native query - char(3) column

görünen benzer, daha kısa çözüm sunmak gibi görünüyor yapar: Bazı (skalası) kodu üzere hemen

Ve

Benim için çalışıyorum:

Query q2 = em.createNativeQuery("select sc_cur_code, sc_amount from sector_costs"); 
q2.unwrap(SQLQuery.class).addScalar("sc_cur_code", StringType.INSTANCE); 
+0

herhangi bir fikir, hazırda bekleme olmayan bir jpa sağlayıcısıyla nasıl yapılır? – vikingsteve

1

Oldukça eski bir soru olduğunu biliyorum, j Başka durumda birisi bunu yanıtlayan ust

createNativeQuery sonuç elde edilir sınıfın türünü belirten bir parametre alır sorunla karşı karşıya nasıl senin olayda Yani, hiç

val sql = "select distinct story as story from ..."; 
Query = getEntityManager().createNativeQuery(sql,Story.class); 
+0

Bu hoş olabilir, ancak ilkel/skaler (örneğin, örneğin Short.class) üzerinde çalışma gibi görünmüyor, herhangi bir fikri neden? (Bilinmeyen varlık: java.lang.Short) – JRun

+0

Bir DTO sınıfına temel değerler koyun. – wildloop

İlgili konular