これは私が持っているSQLステートメントです。
SELECT USER_PROFILE.FIRST_NAME, USER_PROFILE.LAST_NAME, USER_PROFILE.USER_TYPE
FROM USER_PROFILE
INNER JOIN USER_LOGIN_STATUS
ON USER_PROFILE.USER_ID=USER_LOGIN_STATUS.USER_ID
ORDER BY USER_PROFILE.FIRST_NAME
そして、私は休止状態の DetachedCriteria に相当すると考え、結果として 2 つのデータしか持たないと予想される以下のコードを実行しようとしています。
DetachedCriteria dc = getDetachedCriteria();
DetachedCriteria userLoginCriteria = DetachedCriteria.forClass(UserLoginStatus.class);
userLoginCriteria.setProjection(Projections.distinct(Projections.property("userId")));
dc.add(Subqueries.propertyIn(UserField.id.name(), userLoginCriteria));
DetachedCriteria profileCriteria = dc.createCriteria("profile");
profileCriteria.addOrder(Order.asc("firstName"));
return getAll(dc, pageSetting);
しかし残念ながら、これは予期しない結果です。複数のデータの結果が得られました。
名前 | タイプ |
- ベン・ジョーンズ | ユーザー |
- ベン・ジョーンズ | ユーザー |
- トム・ホーマー | ゲスト |
- トム・ホーマー | ゲスト |
正確に同等の DetachedCriteria またはこれに対する解決策を知っている人はいますか?