我正在尝试实现某个日期的组明智最大值,但即使日志显示正确的查询,我也会遇到异常:
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();
它奏效了。
让我看的地方更少了……此刻塞罗。关于导致演员阵容异常的任何想法?