java query object_java – 如何处理JPQL查询返回的Object类型?

我可以使用仅返回一个表中的数据的JPQL轻松完成此操作.

SELECT m1 FROM MasatosanTest m1

这意味着返回一种数据类型.所以我可以将查询结果存储到指定类型的List中:

List mt = query.getResultList();

代码段

private static final String JPQL_TEST = "SELECT m1 FROM MasatosanTest m1;

@Path("innerJoin")

@GET

@Produces("application/json")

public List getJoinedResult() {

System.out.println("getJoinedResult called");

EntityManager em = null;

List 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 result = query.getResultList();

这不会导致立即错误,但实际上正在返回Object类型而不是特定类型,例如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种类型的物体组成(即Masatosan Object和Masatotan2 Object)

和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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值