Как использовать пользовательский оператор выбора в Hibernate с использованием класса HibernateDaoSupport - PullRequest
0 голосов
/ 19 апреля 2010

Я пытаюсь написать пользовательский оператор выбора в Hibernate, используя метод getHibernateTemplate (). У меня проблемы с полученным отображением.

Пример кода:

List<User> users = getHibernateTemplate().find("Select user, sysdate as latestPost from User as user");
for (User user : users) {
assertNotNull(users.name);
}

Цель приведенной выше строки - в конечном итоге создать объединение, в котором я получу максимальное количество записей, сделанных пользователем. У меня проблема в том, что результирующий список пользователей не является списком объектов User, и я получаю исключение приведения класса.

Надеюсь, этого достаточно. Это значительно упрощенная версия моей проблемы и комбинация фрагментов из различных частей моего приложения.

Ответы [ 2 ]

3 голосов
/ 20 апреля 2010

понял это. Я уже использую производный от Diber класс HibernateDaoSupport, так что это решение согласуется с этим.

String queryString = "Select {user.*}, (select max(submitted) from posts where post.user_id = user.id) MAX_POST from users user";
SQLQuery query = getSession().createSQLQuery(queryString);
query.addEntity("user", User.class);
query.addScalar("MAX_POST", Hibernate.DATE);

List results = query.list();
List<User> users = new ArrayList();
for (Object item : results) {
    Object[] element = (Object[]) item; 
    User user = (User)element[0];
    user.setMaxPost((Date)element[1]);
    users.add(user);
}

Приведенный выше пример сильно упрощен, но должен показать метод, который можно использовать для решения этой проблемы. Я действительно смог включить одну из моих выборок EAGER, включив в SQL необходимые таблицы, а затем использовать метод addJoin

0 голосов
/ 19 апреля 2010

Похоже, что Hibernate не хочет, чтобы вы хотели здесь. Может быть, вам следует начать с SimpleJDBCTemplate и RowMapper и продолжить оттуда.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...