日付のグループごとの最大値を達成しようとしていますが、ログに正しいクエリが表示されていても、例外が発生します:
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
...
編集:OK、日付にキャストしようとmaxLogin
しましたが、同じ例外が発生しています。
編集:私はこれを試しました
Criteria crit = session.createCriteria(UsersSessions.class,"u");
crit.setProjection(Projections.projectionList()
.add(Projections.max("u.login").as("login")));
Timestamp max=(Timestamp)crit.uniqueResult();
そしてそれはうまくいきました。
見る場所がさらに少なくなりました...現時点ではセロ。キャスト例外の原因についてのアイデアはありますか?