2011-02-16 27 views
1

我遺憾的是需要使用「天然」的SQL查詢我的項目的一部分來自未映射表返回記錄跳過一個元組結果的指標。如何從一個SQL查詢

我有一堆,這是爲了返回相同的每行的值,然後進入一個處理方法將它們變成對象的查詢。

如:

List<Object[]> list = ...; 
List<MyBean> beans = ...; 

SQLQuery qry1 = session.createSQLQuery(...); 
SQLQuery qry2 = session.createSQLQuery(...); 
SQLQuery qry3 = session.createSQLQuery(...); 

list.addAll(qry1.list()); 
list.addAll(qry2.list()); 
list.addAll(qry3.list()); 

for(Object[] tuple : list) 
{ 
    MyBean bean = new MyBean(); 
    bean.setSomething0(tuple[0]); 
    bean.setSomething1(tuple[1]); 
    bean.setSomething2(tuple[2]); 
    bean.setSomething3(tuple[3]); 
    beans.add(bean); 
} 

現在,我的問題是,qry3沒有一個培訓相關的列來填充元組的第二個索引處的值,但並填充第三索引。我需要修改它的查詢,以便以某種方式用null""填充元組。

我試過"select a, b, null, d"然而和這兩個"select a, b, '', d"這些會導致異常:

org.hibernate.MappingException: No Dialect mapping for JDBC type: 1111 
    at org.hibernate.dialect.TypeNames.get(TypeNames.java:56) 
    at org.hibernate.dialect.TypeNames.get(TypeNames.java:81) 
    at org.hibernate.dialect.Dialect.getHibernateTypeName(Dialect.java:370) 
    at org.hibernate.loader.custom.CustomLoader$Metadata.getHibernateType(CustomLoader.java:559) 
    at org.hibernate.loader.custom.CustomLoader$ScalarResultColumnProcessor.performDiscovery(CustomLoader.java:485) 
    at org.hibernate.loader.custom.CustomLoader.autoDiscoverTypes(CustomLoader.java:501) 
    at org.hibernate.loader.Loader.getResultSet(Loader.java:1796) 
    at org.hibernate.loader.Loader.doQuery(Loader.java:674) 
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236) 
    at org.hibernate.loader.Loader.doList(Loader.java:2213) 
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104) 
    at org.hibernate.loader.Loader.list(Loader.java:2099) 
    at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:289) 
    at org.hibernate.impl.SessionImpl.listCustomQuery(SessionImpl.java:1695) 
    at org.hibernate.impl.AbstractSessionImpl.list(AbstractSessionImpl.java:142) 
    at org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:152) 

讓我怎麼告訴我的查詢跳過在這種情況下的指數?

回答

3

你可以嘗試將它轉換爲預期的類型:

select a, b, cast(null as varchar), d 
+0

完美的謝謝。 – pstanton 2011-02-16 21:31:56

0

或者,只是檢查元組數組的長度,而不要試圖設置你沒有一個參數..

+0

我的例子被簡化了,這不是實際代碼中的一個選項。 – pstanton 2011-02-16 21:29:24