查询之间的差异

时间:2012-07-02 14:28:26

标签: hibernate hql

我正在使用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

一切都很好。

有人可以回答我在此查询中需要“选择”的原因吗?

由于

1 个答案:

答案 0 :(得分:2)

因为没有显式SELECT Hibernate无法弄清楚只应返回实例HistoryPerPhraseEntity。它还返回已加入的实体。

这就是它返回Object数组列表的原因。数组的第一个索引包含HistoryPerPhraseEntity,第二个索引中的对象类型与linkAddressByLinkId集合中的元素类型相同。

如果由于某种原因想要只访问第一个查询返回的HistoryPerPhraseEntity,可以通过将返回列表的每个元素强制转换为Object[]并将Object[0]强制转换为HistoryPerPhraseEntity

最好使用SELECT。