Hibernate Criteria.list()导致java.lang.ClassCastException

时间:2015-03-13 15:13:30

标签: java hibernate

几年后我回到Java,这是我第二天看hibernate并且还没有完全理解它。

我有以下标准执行连接:

Criteria cr = s.createCriteria(Bla.class, "bla");
cr.setFetchMode("bla.nodePair", FetchMode.JOIN);
cr.createAlias("bla.nodePair", "node_pair");
cr.add(Restrictions.in("bla.blaName", (List<Bla>) getBlas()));

ProjectionList columns = Projections.projectionList()
    .add(Projections.property("node_pair.priNode"))
    .add(Projections.property("bla.blaName"))
    .add(Projections.property("node_pair.secNode"))
    .add(Projections.property("bla.port"));

cr.setProjection(columns);
List<Object[]> list = cr.list(); // Exception occurs here

这就是我可以创建一个有效的SQL查询以及我之后的确切内容。

但是,当我尝试生成结果列表cr.list();时,我得到:

java.lang.ClassCastException: com.some.package.domainobject.Bla cannot be cast to java.lang.String

我应该如何构建我的列表。任何指针都非常赞赏。

1 个答案:

答案 0 :(得分:2)

在Criteria API中,尝试获取结果时,异常总是(?)抛出。

在您的情况下,有问题的行可能是

cr.add(Restrictions.in("bla.blaName", (List<Bla>) getBlas()));

您似乎要检查java.lang.String是否属于Collection<Bla>

如果equals中的hashcodeBla方法使用blaName字段,您应该可以使用

cr.add(Restrictions.in("bla", (List<Bla>) getBlas()));

否则,实现一个返回getBlasNames()

List<String>函数