我正在使用join在HQL中构建查询,并且我已经堆叠了一件事:
我的查询如下:
From HistoryPerPhraseEntity as history left join history.linkAddressByLinkId where history.serviceId = :serviceId
并且查询很好,但是当我试图将响应抛入我的DataBase对象并尝试获取这样的值时:
historyPhrase.get(0).getPhraseId()
我有:
[Ljava.lang.Object; cannot be cast to com.rasp.lta.domain.HistoryPerPhraseEntity
但改变之后:
Select history From HistoryPerPhraseEntity as history left join history.linkAddressByLinkId where history.serviceId = :serviceId
一切都很好。
有人可以回答我在此查询中需要“选择”的原因吗?
由于
答案 0 :(得分:2)
因为没有显式SELECT Hibernate无法弄清楚只应返回实例HistoryPerPhraseEntity。它还返回已加入的实体。
这就是它返回Object数组列表的原因。数组的第一个索引包含HistoryPerPhraseEntity,第二个索引中的对象类型与linkAddressByLinkId集合中的元素类型相同。
如果由于某种原因想要只访问第一个查询返回的HistoryPerPhraseEntity,可以通过将返回列表的每个元素强制转换为Object[]
并将Object[0]
强制转换为HistoryPerPhraseEntity
最好使用SELECT。