Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Java EE (J2EE) и Spring > Вопрос по работе с hibernate |
Автор: MakTpaxep 25.12.2012, 23:17 | ||
Две таблицы: users и tasks. Подскажите как реализовать такую штуку: Есть user, который авторизовался при помощи spring security. Надо вытащить его ID. Мне надо выбрать из tasks все строки связанные с текущим юзером через id. В tasks есть foreign key соответсвенно. Извиняюсь если вопрос задан криво или не точно. Тут такое обилие технологий, спобосов разных, я запутался. UPD Ну вот вроде сам чуть-чуть разобрался. Сделал запрос при помощи criteria. Смотрится конечно не очень. Как обычный запрос.
Остался только вопрос где взять ID текущего пользователя. Имя я беру через principle. Думаю можно сделать ещё один запрос и я получу ID. Но всё-таки я что-то не то делаю... |
Автор: MisterCleric 26.12.2012, 13:42 | ||||
Привет. Если ты используешь Spring Security & JDBC DaoAuthenticationProvider, то можешь написать кастомную реализацю JdbcDaoImpl, где кроме логин/пароль, можешь вытащить еще и ИД и своего кастомного запроса. Примерно так:
И дальше твой principle как раз и есть этот объект MyUser. Не смотрел: может в 3.2 это поменяется, чтобы быть проще. |
Автор: MakTpaxep 26.12.2012, 17:00 | ||||||||
Спасибо за совет. Идею я уловил, но в коде пока что много для меня непонятного. Решил пока к себе не пересаживать) Вся соль в этом кусе как я понял?
Ну вообщем действительно сложновато. Для меня по крайней мере. Сейчас я сделал как и планировал два запроса: В TasksDAO
А в контроллере так
Работает. Вот так вот)) Раз уже эта тема про гибернейт - поястине, пожалуйста, какая разница как делать запросы через гибернейт: У себя совместил два подхода где-то подсмотренных (createQuery и criteria. А есть ещё что-то в духе hibernateTemplate. UPD А ещё мне очень понравилось вот это:
Так кратко) |
Автор: MisterCleric 26.12.2012, 17:27 | ||
createQuery: рекомендую использовать это для сложных статических запросов. criteria: подходит для запросов по одной Entity с вариантами фильтрации, сортировки и пейджирования. hibernateTemplate: умер этот подход. В Spring 3.1 уже не рекомендуют его использовать. getById(int id): ничего удивительного. В конечном итоге просто запрос на одну Entity по ее ИД. А то, что ты выкрутился через дополнительный запрос для, так ничего удивителнього: пусть будет - лишь бы работало как надо и быстро. Бывает и хуже.
Да, ну кастомная реализация класса User из Spring Security |
Автор: MakTpaxep 26.12.2012, 20:24 | ||||||||||||
Спасибо, за объяснения! Сам бы искал очень долго. Появился ещё вопрос связанный с гибернейтом: При попытке сохранить новый экземпляр сущности выдаётся ошибка
Ругается из-за того, что в классе сущности у меня такие записи:
Первая используется чтобы во вьюшке можно было писать
То есть чтобы сразу обращаться к объекту юзера, а не доставать его лишний раз через ID. А без второй записи я не знаю как записать объект в БД. Когда я сохраняю новый Task, нужны все поля. Вот какую штуку я сделал в форме, чтобы было удобно заполнять assignee_id
Как теперь выкручиваться? UPD Дошёл своими умом переборов вариантов. Везде где подразумевается колонка, можно использовать assignee.id Вот примеры:
Круто |
Автор: MisterCleric 26.12.2012, 21:27 | ||||
Должно быть так:
|