2015-04-23 277 views
0

我从下面得到上述错误(println()调用表明resultObj的确是PGobject):org.postgresql.util.PGobject不能转换为org.postgresql.util.PGobject

public List<Search> findSearchesBySearchString(String searchString) throws ClassNotFoundException{ 
    List<Search> searchResults = new ArrayList<>(); 
    String queryString = "SELECT s FROM Search s WHERE '"+ searchString +"' = ANY(s.searchstrings)"; 
    Query query = em.createNativeQuery(queryString); 
    List<Object> objectResultsList = query.getResultList(); 
    for(Object resultObj: objectResultsList){ 
     System.out.println("***********************************************************"+ resultObj.getClass()); 
     PGobject resultObject = (PGobject)resultObj; // ClassCastException thrown here 
     Search search = new Search(); 

感谢

回答

1

这时候你有你的类路径PostgreSQL的JDBC驱动程序的多个版本才真正发生。也许一个在你的webapp中,另一个在servlet容器中。确保只有一个这样的jar文件。

+0

部署目录(在Wildfly上)有一个Postgres JDBC驱动程序的副本。我也有我的Maven依赖项中列出的相同版本的库。出于这个原因,我不认为这是因为你建议的不匹配。你之前是否在你的代码中使用了这种类型的转换。我发现它是利用PostgresSQL数组的必要条件。我明白它们是一个相对较新的特性 - 关于PGobject没有太多的文献。 我也注意到它的文档说它用来保存未知类型的对象。这是我演员失败的原因吗? –

+0

我不是建议版本不匹配。我建议你有两份JAR文件。这将解释错误,即使两个JAR具有完全相同的版本。你需要消除其中的一个。 – Thilo

相关问题