猿问

无法从 Spring-boot SQL 查询中读取结果

我正在尝试使用来自存储库界面的以下查询读取从数据库中获取的数据:


public interface EventObjectRepository extends CrudRepository<EventObject, Long> {

    @Query(value = "select tb.content from table0 tb where tb.id=:id", nativeQuery = true)

    List<String> find(@Param("id") Long id);

}

下面是我从这个查询中得到的结果的示例快照,它存储在一个 java 列表中: List<String> results


[clob1: '{"identity":0,"original_text":"some text","rowid":2}', clob2: '{"identity":2,"original_text":"some text","rowid":3}', clob3: '{"identity":3,"original_text":"some text","rowid":4}', clob4: '{"identity":4,"product.name":"some name","original_text":"some text","commodity.name":"some name","rowid":5}']

但是,当我尝试使用例如访问列表的内容时:


results.get(1)

我收到以下错误:


[ERROR] 2018-10-22 13:44:45.113 [http-nio-8090-exec-1] [dispatcherServlet] - Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.Cla

ssCastException: com.sun.proxy.$Proxy164 cannot be cast to java.lang.String] with root cause

java.lang.ClassCastException: com.sun.proxy.$Proxy164 cannot be cast to java.lang.String

我应该怎么做才能得到结果字符串?


白衣非少年
浏览 294回答 3
3回答

慕田峪9158850

如果我没有错,您正试图访问整个列表中的第一个对象,因为您需要将所有数据放入列表,然后尝试从列表中获取(索引)。例如:列表 listEmp=empRepository.findAll().get

小唯快跑啊

在分配results.get(1)给之前String variable,您可以检查列表中数据的类型,results.get(1).getClass()然后尝试将结果分配给适当的类型。

拉丁的传说

我终于在 CLOB 的帮助下让它工作了。我做的第一件事是在类定义中将 String 更改为 CLOB,如下所示:@Column(columnDefinition="text")@Lobprivate String content;通过添加@Lob,字符串将按照此处的帖子中的建议保存到 DB 内的 CLOB 。然后为了检索数据,存储库查询将返回一个 CLOB 列表,如下所示:public interface EventObjectRepository extends CrudRepository<EventObject, Long> {&nbsp; &nbsp; @Query(value = "select tb.content from table0 tb where tb.id=:id", nativeQuery = true)&nbsp; &nbsp; List<Clob> find(@Param("id") Long id);}将数据放入 CLOB 列表后,我需要使用 InputStream 和 IOUtils 将每个 CLOB 转换为字符串。例如,要从列表中获取一项:InputStream stream = results.get(1).getAsciiStream();StringWriter w = new StringWriter();IOUtils.copy(stream, w);String sample = w.toString();
随时随地看视频慕课网APP

相关分类

Java
我要回答