0

我正在尝试实现某个日期的组明智最大值,但即使日志显示正确的查询,我也会遇到异常:

java.lang.ClassCastException : java.lang.String cannot be cast to java.util.Date

这是生成强制转换异常的代码的最小部分:

DetachedCriteria maxLogin= DetachedCriteria.forClass(UsersSessions.class,"du");
maxLogin.setProjection(Projections.projectionList()
    .add(Projections.max("du.login").as("login")));

Criteria crit = session.createCriteria(UsersSessions.class,"u");
crit.add(Subqueries.eq("u.login", maxLogin));

这是我试图用我的完整代码做的 sql 等价物:

SELECT *
FROM   UsersSessions u
WHERE  u.login=(SELECT MAX(du.login)
              FROM UsersSessions ud
              WHERE ud.fkUser = u.fkUser);

这会更好:

SELECT *
FROM (SELECT *
FROM UsersSessions 
[WHERE conditions]
ORDER BY login  DESC) u
GROUP BY u.fkUser

但是我知道如何在这样的from部分中进行子查询......

编辑:好的,刚刚尝试转换maxLogin为 Date 但我遇到了同样的异常。

编辑:我刚试过这个

Criteria crit = session.createCriteria(UsersSessions.class,"u");
crit.setProjection(Projections.projectionList()
        .add(Projections.max("u.login").as("login")));
Timestamp max=(Timestamp)crit.uniqueResult();

它奏效了。

让我看的地方更少了……此刻塞罗。关于导致演员阵容异常的任何想法?

4

2 回答 2

0

你确定crit.add(Subqueries.eq("u.login", maxLogin));maxLogin 是日期类型吗?如果没有,请尝试将其转换为 java.lang.Date 类型。

于 2013-02-06T02:25:19.003 回答
0

搞定了...

显然,该eq函数将字符串作为比较值。

Subqueries.eq("u.login", maxLogin);

这是将属性与子查询进行比较的方法:

Subqueries.propertiesEq(new String[]{"u.login"},maxValidacion);
于 2013-02-06T18:13:56.650 回答