当前位置: 首页 > 面试题库 >

JPA本机查询联接返回对象,但取消引用引发类强制转换异常

卫逸春
2023-03-14
问题内容

我正在使用JPQL本机查询来联接表,查询结果存储在中List<Object[]>

public String getJoinJpqlNativeQuery() {



            String final SQL_JOIN = 
               "SELECT v1.bitbit, v1.numnum, v1.someTime, t1.username, 
                t1.anotherNum FROM MasatosanTest t1 
                JOIN MasatoView v1 ON v1.username = t1.username;"

            System.out.println("get join jpql native query is being called 
        ============================");

            EntityManager em = null;
            List<Object[]> out = null;
            try {
                em = EmProvider.getDefaultManager();
                Query query = em.createNativeQuery(SQL_JOIN);
                out = query.getResultList();

                System.out.println("return object ==========>" + out);

                System.out.println(out.get(0));

                String one = out.get(0).toString(); //LINE 77 where ClassCastException
                System.out.println(one);
            }
            catch(Exception e) {
            }
            finally {
                if(em != null) { em.close; }
            }
}

问题是

System.out.println("return object ==========>" + out); 输出:

return object ==========>
[[true, 0, 2010-12-21 15:32:53.0, masatosan, 0.020], 
[false, 0, 2010-12-21 15:32:53.0, koga, 0.213]]

System.out.println(out.get(0)) 输出:

[true, 0, 2010-12-21 15:32:53.0, masatosan, 0.020]

所以我假设我可以分配out.get(0)的返回值,该值应该是String:

String one = out.get(0).toString();

但是我得到了奇怪的ClassCastException。

java.lang.ClassCastException: java.util.Vector cannot be cast to 
[Ljava.lang.Object;
        at local.test.jaxrs.MasatosanTestResource.getJoinJpqlNativeQuery
(MasatosanTestResource.java:77)

那么到底是怎么回事?甚至Object[] foo = out.get(0);会抛出ClassCastException :(


问题答案:

我对JPQL本机查询不熟悉,但是您只需使用以下命令进行调试:

对象o = out.get(0); System.out.println(o.getClass());

然后从那里开始。如果是向量,请遍历并查找向量中的内容。



 类似资料:
  • 我有一个对象,它扩展了。默认情况下,这两个对象都在我的Derby数据库的表中(包含中的字段)。通常我会选择,如下所示: 但是,由于查询的复杂性,我使用的是本机查询,如下所示: 但这会引发一个强制转换异常。我认为这是由于中的任何字段。 我的问题是,如何使用具有相等结果的本机查询作为第一个示例(包括与JPQL查询返回的和(等等)相同的值)来选择?

  • 问题内容: 我正在创建一个示例来演示liferay中的关系。我以Book实体和作者为例进行多对多关系。我正在下面的博客中创建此示例。 http://www.liferaysavvy.com/2014/01/liferay-service-builder-many-to- many_12.html 但是我遇到了类强制转换异常的问题。在博客中也有报道说它正在抛出类强制转换异常。 我想知道这背后的原因。

  • 问题内容: 我有一个实体和一个实体。关系的定义如下: 现在,当我删除角色时,需要从具有该角色的所有用户中删除该角色。通常,您可以通过查找具有该角色的所有用户,从列表中删除该角色并保存用户来执行类似的操作。但是,当可能有超过一百万的用户时,我不想遍历应用程序中的这么多实体。因此,我想使用本机查询从联接表中删除行。我尝试将其添加到我的存储库中: 但是,当我这样做时,我在日志中看到以下内容: 我不明白在

  • 问题内容: 我有一个延伸的对象。默认情况下,两个对象都在我的Derby数据库的表中(来自的包含字段)。通常我会选择一个这样的: 但是由于查询的复杂性,我使用的是本机查询,如下所示: 尽管这会引发强制转换异常。我认为这是由于中的任何字段造成的。 我的问题是,我如何选择一个使用本机查询的结果与第一个示例相同的结果(包括与JPQL查询将返回的和(等)相同的值)? 问题答案: 您可能想尝试以下方法之一:

  • 大家好,我在一个使用SpringDataJPA的SpringMVC项目中工作,我在一个从JpaRepository扩展而来的接口中有一个nativeQuey,在该查询中,我从不同的表中选择一些值,并返回一个 我打印了该ArrayList的值,其内容如下: 由于查询返回3行,每行有7个值,我怀疑这些对象是3(列表),每个列表有7个字段,我非常确定它们是字符串和int,我在类中有两个导入,我想在其中强

  • 有没有一种简单的方法可以做到这一点: 编辑:我写了一份正确答案的工作副本: