猿问

在空查询结果后获取列名称

我正在创建一个应用程序,它接收一个通用的 SQL 代码并向用户返回一个包含列和查询结果的结果集(就像一个 MySQL 客户端)。但是当值结果集为空时,hibernate 不会运行 de queryTransformer,因此找不到列。有没有办法只获取列信息?


我尝试使用 AliastoEntityMapResultTransformer 并使用一些可用的方法,但它没有用。


NativeQuery< ? > query = session.createNativeQuery(sql);

Map<String, Object> queryParams = new TreeMap<>(params);


Optional<RowSelection> rowSelection = getRowSelection(params);

if (rowSelection.isPresent()) {

    query.setFirstResult(rowSelection.get().getFirstRow())

        .setMaxResults(rowSelection.get().getMaxResults());

    queryParams.remove("itemsPerPage");

    queryParams.remove("pageNumber");

}


val queryTransformer = new BookmarkResultHibernateCreator();

queryParams.entrySet().forEach(k -> {

    if (k.getValue() instanceof Collection) {

        Collection< ? > col = (Collection< ? >) k.getValue();

        query.setParameterList(k.getKey(), col);

    } else {

        query.setParameter(k.getKey(), k.getValue());

    }

});



query.setResultTransformer(queryTransformer);

@Cleanup ScrollableResults scroll = query

        .setFetchSize(100)

        .setCacheMode(CacheMode.IGNORE)

        .setReadOnly(true)

        .scroll(ScrollMode.FORWARD_ONLY);

// Força execução da query.

while(scroll.next());

return queryTransformer.getResults();


不显示任何错误,只是不按我的预期工作


慕容森
浏览 135回答 1
1回答

拉风的咖菲猫

我使用本机 SQL 形式 java.sql.* 解决了这个问题entityManager 有一个名为 doWork 的方法,它接收一个 lambda 并返回一个连接,我用这个连接打开了一个语句。statament 具有返回数组中的列的方法 getMetaData() :)ResultSetMetaData meta = resultSet.getMetaData();int columnCount = meta.getColumnCount();
随时随地看视频慕课网APP

相关分类

Java
我要回答