我正在尝试为日期实现组智能最大值,但即使日志显示正确的查询,我也得到例外:
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
但是idk如何在from
部分做一个子查询......
编辑:好的,刚尝试将maxLogin
投射到日期,但我得到同样的例外。
编辑:我刚试过这个
Criteria crit = session.createCriteria(UsersSessions.class,"u");
crit.setProjection(Projections.projectionList()
.add(Projections.max("u.login").as("login")));
Timestamp max=(Timestamp)crit.uniqueResult();
它有效。
离开我的地方甚至更少...... cero此刻。 有什么想法导致演员除外?
答案 0 :(得分:0)
您确定crit.add(Subqueries.eq("u.login", maxLogin));
maxLogin是日期类型吗?如果没有,请尝试将其转换为java.lang.Date类型。
答案 1 :(得分:0)
搞定了......
显然,eq
函数将字符串作为比较值。
Subqueries.eq("u.login", maxLogin);
这是将属性与子查询进行比较的那个:
Subqueries.propertiesEq(new String[]{"u.login"},maxValidacion);