如何处理JPQL查询返回的Object类型?

我可以使用仅返回一个表中的数据的JPQL轻松完成此操作。
SELECT m1 FROM MasatosanTest m1
这意味着返回一种数据类型。所以我可以将查询结果存储到指定类型的List中:
List<MasatosanTest> mt = query.getResultList();
代码段
private static final String JPQL_TEST = "SELECT m1 FROM MasatosanTest m1;

    @Path("innerJoin")
        @GET
        @Produces("application/json")
        public List<MasatosanTest> getJoinedResult() {
            System.out.println("getJoinedResult called");
            EntityManager em = null;
            List<MasatosanTest> mt = null;

            try {
                em = EmProvider.getDefaultManager();
                Query query = em.createQuery(JPQL_TEST);
                mt = query.getResultList();
            }
            catch(Exception e) {
                System.out.println("MasatosanTestResource.java - getJoinedResult ERROR: " + e);
            }
            finally {
                if(em != null) {
                    em.close();
                }
            }
            return mt;
        }
现在,如果我尝试涉及2个表的JPQL .... 询问
SELECT m1, m2 FROM Masatosan m1, Masatosan2 m2;

List<Masatosan> result = query.getResultList(); 
这不会导致立即错误,但实际上会返回对象类型而不是特殊类型,如
Masatosan
Masatosan2
所以当我迭代时,它会导致CASTException,
for(Masatosan item : result) { .... }
处理这种情况的好方法是什么? UPDATE 如果我系统打印变量“
result
”它吐出:
return object ==========>
[[Ljava.lang.Object;@1540f1e, [Ljava.lang.Object;@1ac7e54, [Ljava.lang.Object;@199cd0a, 
[Ljava.lang.Object;@6487d7, [Ljava.lang.Object;@125755, [Ljava.lang.Object;@239ff3, 
[Ljava.lang.Object;@da2335, [Ljava.lang.Object;@13da77b, [Ljava.lang.Object;@bea4e1, 
[Ljava.lang.Object;@3add4b, [Ljava.lang.Object;@968e06, [Ljava.lang.Object;@4642c8, 
[Ljava.lang.Object;@ca81a4, [Ljava.lang.Object;@105510f, [Ljava.lang.Object;@cde78, 
[Ljava.lang.Object;@e1b60e, [Ljava.lang.Object;@776306, [Ljava.lang.Object;@6275c, 
[Ljava.lang.Object;@21035, [Ljava.lang.Object;@1762346, [Ljava.lang.Object;@105ea3d, 
[Ljava.lang.Object;@15564f6, [Ljava.lang.Object;@1577817, [Ljava.lang.Object;@18d30be, 
[Ljava.lang.Object;@7b235c, [Ljava.lang.Object;@4e83d4, [Ljava.lang.Object;@b0f862]
首先,我以为我在数组中但是[第一个中的括号似乎只是String的一部分??? 去测试:
 for(Object items : result) {
            System.out.println("-------------------" + items);
            System.out.println(items.toString());
            return null;
        }
这将输出:
 -------------------[Ljava.lang.Object;@c723e8
[Ljava.lang.Object;@c723e8
所以“L”旁边的方括号不代表数组。 这意味着查询结果实际存储在
List<Object>
中,它由2种类型的对象组成(即M
asatosan Object
Masatotan2
对象) 和ClassCastException :(我很困惑,它应该是可投射的)
 int count = 0;
        for(Object items : mt) {
            System.out.println("-------------- " + count + " --------------" + items);
            count ++;
            Masatosan woot = (Masatosan) items;
            System.out.println(woot.getUsername());
        }

java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to local.test.entity.Masatosan
    
已邀请:
这可能会返回一个
List<Object[]>
ClassCastException
的信息将具有确切的类型。如果我是对的:
for (Object[] items : result) {
    Masatosan m1 = (Masatosan) items[0];
    Masatosan m2 = (Masatosan) items[1];
}
引用文档   当在SELECT子句中使用多个select_expressions时,查询的结果是Object []类型,并且此结果中的元素按照SELECT子句中的规范顺序对应     

要回复问题请先登录注册