java - 如何跳过sql查询的元组结果中的索引

标签 java hibernate

不幸的是,我需要对项目的一部分使用“ native ”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)

那么在这种情况下我该如何告诉我的查询跳过索引呢?

最佳答案

您可以尝试将其转换为预期的类型:

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

关于java - 如何跳过sql查询的元组结果中的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5015795/

相关文章:

java - ORA-14450 : attempt to access a transactional temp table already in use

java - 枚举之间的共享方法

java - 什么是 @JoinColumn 以及它在 Hibernate 中的使用方式

java - 尝试在 Hibernate 中使用 C3P0

hibernate - 从子查询 criteriaBuilder 中选择

javascript - 什么时候将文件命名为JS或JSP?

java - tomcat 启动 java.lang.ClassNotFoundException : [Ljava. lang.String;

java - 修改Http响应

spring - 无法使用 spring jpa 获取更新的实体并且唯一约束不会停止更新

hibernate @OneToMany 与mappedBy(父子)关系和缓存问题