Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > проблема с запросом на Hibernate


Автор: 4epT 19.12.2010, 15:38
Добрый день) Получается есть таблица User, Role, RoleCast. В таблице User есть поле id, login. password. в таблице Role id, title, role. Ну и таблица RoleCast играет роль связи ... тоесть каждый User может иметь много ролей. RoleCast имеет такие поля id, idUser и idRole.

Как выбрать все роли для юзера? по его id ...

делаю вот так вот:

Код

ArrayList<Rolecast> tmp = new ArrayList<Rolecast>();
        ArrayList<Role> lst = new ArrayList<Role>();
        Session session = sessionFactory.openSession();
        session.beginTransaction();
        Users usr = this.get(login);
        tmp = (ArrayList<Rolecast>) session.createCriteria(Rolecast.class).add( Restrictions.eq( "idUser" , usr.getId() ) ).list();
        //lst = (ArrayList<Role>) session.createSQLQuery("select r.* from rolecast rc inner join role r on idRole = r.id where rc.idUser = " + usr.getId()).list();
        
        for(int i = 0; i < tmp.size(); i++)
        {
            lst.add( (Role) session.createCriteria(Role.class).
                             add( Restrictions.eq( "id", tmp.get(i).getIdRole() ) ).list());
        }
        
        return lst;


Выдает вот такой Exception:

Код

java.lang.ClassCastException: java.util.Collections$EmptyList cannot be cast to java.util.ArrayList
        at com.myapp.dao.UserDAO.getRoles(UserDAO.java:55)
        at com.myapp.springUtils.UserServiceImpl.loadUserByUsername(UserServiceImpl.java:38)


Кто подскажет что я не так делаю ? Или как правильно написать такой запрос.

Искал по форуму такой вопрос, нашел но он не помог ... Там был совет сделать поля в RoleCast не int а именно User и Role. Но как то не понятно зачем так делать, есди в БД поля именно id.

Вопрос решен) Неправильно конфиг сделал.

Автор: surly 20.12.2010, 21:32
так связь же OneToMany? если да, зачем 3 таблицы, решается все 2мя.

Добавлено через 50 секунд
ну и если сделал, покажи как и покажи мапинги классов=)

Автор: 4epT 21.12.2010, 18:27
Цитата(surly @ 20.12.2010,  21:32)
так связь же OneToMany? если да, зачем 3 таблицы, решается все 2мя.

Добавлено @ 21:33
ну и если сделал, покажи как и покажи мапинги классов=)

сделал мягко говоря не красиво .... почему OneToMany ? связи как раз выходит ManyToMany .... между юзерами и ролями стоит таблица которая является связующим звеном)) Если же я ошибаюсь покажи пример пожалуйста)

Мое решение как в первом посте .... ошибка была в том, что в конфиг добавлял только класс юзеров, а просто роли и кастРоли забыл)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)