Как пропустить индекс в результате кортежа из запроса SQL - PullRequest
1 голос
/ 16 февраля 2011

Мне, к сожалению, нужно использовать «нативные» 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 не имеет соответствующего столбца для заполнения значения в2-й индекс кортежа, но он заполняет 3-й индекс.Мне нужно изменить его запрос так, чтобы он как-то заполнял кортеж 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)

так, как мне сказать, чтобы мой запрос пропустил индекс в этом случае?

Ответы [ 2 ]

3 голосов
/ 16 февраля 2011

Вы можете попытаться привести его к ожидаемому типу:

select a, b, cast(null as varchar), d
0 голосов
/ 16 февраля 2011

Или просто проверьте длину массива кортежей и не пытайтесь установить параметр, которого у вас нет ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...