Когда я пытаюсь это сделать, в результате получаю JSON, но это занимает много времени:
Criteria c = sessionFactory.getCurrentSession().createCriteria(User.class);
List<User> users = c.list();
List<User> specialUsers = new ArrayList<>();
for (User user : users) {
List<Perm> userPerms = user.getProfile().getPerms();
for (Perm perm : userPerms) {
if (perm.getId().equals(SPECIAL_ID)) {
specialUsers.add(user);
}
}
}
return specialUsers;
и JSON выглядит так:
[{"id":111,"name":"Name111"},{"id":222,"name":"Name222"}]
В попытке улучшить производительность я попробовал код ниже. В приложении SQL результаты в порядке, несколько записей пользователей:
String sql = "SELECT u.id, u.name FROM app.user u inner join app.perms p where u.profile = p.profile AND p.right= :rightId";
List<User> specialUsers= (List<User>)sessionFactory.getCurrentSession()
.createSQLQuery(sql)
.setParameter("rightId", SPECIAL_ID)
.list();
return specialUsers;
Теперь 'JSON' выглядит так:
[[111,"Name111"],[222,"Name222"]]
Я попробовал несколько вещей вроде select *
, criteria.add(Restrictions...)
но безрезультатно. Что я заметил, так это то, что в первом случае specialUsers.toString
возвращает правильные данные, во втором случае он возвращает бессмысленные строки, такие как Ljava.lang.Object;@23e1469f
.
Любые подсказки, как решить эту проблему?