2012-01-12 12 views
5

JPA kalıcılık sağlayıcımı EclipseLink 2.3'ten Hibernate 3.6.5.Final'e geçirmek için çalışıyorum. Sorun, yerel bir sorgu ile. Not: Bu EclipseLink ile ilgili bir sorun değildi. Bir varlık için bildirilen bir skaler değer, bir String elde etmeye çalışıyorum. döndürülen nesne aslında bir proxy nesnesi olduğundan hazırda ilegetSingleResult, yerel skaler sorgusunda proxy'yi hazırda bekleme durumuna döndürüyor

Query q = em.createNativeQuery("select description from foo where foo_id = ?"); 
q.setParameter(1, fooId); 
String description = (String)q.getSingleResult(); 

Ben ClassCastException olsun: Burada kodudur. Ne tür olduğunu bilmiyorum ama bir dizi olmadığını biliyorum (object.getClass().isArray() yanlıştır) ve bir liste olmadığını biliyorum (object instanceof Listfalse).

Neyi eksik?

+0

Hangi arabirimler 'q.getSingleResult(). GetClass(). GetInterfaces()' return? –

+0

Ahhh ... ihtiyacım olan buydu. Bu java.sql.Clob, org.hibernate.engine.jdbc.WrappedClob ve java.io.Serializable türüdür. Eğer bunu cevaplarsan kabul edeceğim. Kolonun bir clob olduğunun farkında bile değildim ve EclipseLink'in benim için String'e dönüşümünü yaptığına şaşırdım. – Ryan

+0

Memnun olurum! –

cevap

4

özetleme yorumlar:

hangi arayüzler q.getSingleResult().getClass().getInterfaces() dönüşü yapar?


Bu tip java.sql.Clob, org.hibernate.engine.jdbc.WrappedClob ve java.io.Serializable taşımaktadır. [...] Hatta sütun clob olduğunu fark etmedi ve ben EclipseLink benim için String dönüşüm yaptığını şaşırdım

EclipseLink benziyor


(CLOB dönüştürmek için yeterince akıllı olan Gerekirse, String gibi String gibi çok uzun bir karakter dizisidir. Hazırda bekletme ile bu açıkça yapılmalıdır. Bu JPA şartnamesine uygun olduğunu tahmin ediyorum.

0

Hazırda bekletme için doğru veritabanı lehçesini yapılandırdınız mı? Lehim, skaler değerlerin türünü eşlemek için kullanılır. Sorunun alt

+0

Bir Oracle veritabanı kullanıyorum ve uygulama sunucumda bir DataSource içinde yapılandırılmış var. Hazırda bekletme başlatıldığında, günlükleri raporlar - Diyalekt kullanma: org.hibernate.dialect.Oracle10gDialect, bu yüzden bunu anladım. – Ryan

İlgili konular