Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> "Красивое" DAO 
:(
    Опции темы
MrNoob
Дата 9.8.2010, 21:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 16.11.2009

Репутация: нет
Всего: нет



Здравствуйте. 

Изучаю Java, паттерны, sql. И вот читал примерчики по организации DAO (с использованием Hibernate) и придумал себе задачку.

Задачка следующего типа:
Есть 2 объекта: студенты и группы.
И существует 2 операции: добавить студента, и добавить группу(но не просто группу, а сразу с какими-то студентами, т.е. это операция включает предыдущую).

Во многих пример DAO слой организуется примерно след. образом

Код

класс StudentDAO
   операция addStudent
       открыть сессию
       открыть транзакцию

       добавление студента

       закрыть транзакцию
       закрыть сессию 


А вот при написании DAO слоя для группы, хотелось бы использовать уже имеющийся для студента.
Код

класс GroupDAO
   операция addGroup
       открыть сессию
       открыть транзакцию

       добавить группу
       добавить студентов (вызвав StudentDAO)

       закрыть транзакцию
       закрыть сессию 

но есть проблема, т.к. при откате транзакции по созданию группу, некоторые студенты из этой группы были уже успешно добавлены, то откаткой нужно заняться уже своими руками (писать дополнительный код).

И вот хочу попросить у вас какую-нибудь "красивую" мысль по поводу данной задачи (конечно решение не именно этой задачи, а общее).

Как я понимаю единственное решение, это открытое соединение из GroupDAO передать в StudentDAO, но как это красивее всего организовать... а может есть и другое решение?

Заранее благодарю=)
PM MAIL   Вверх
COVD
Дата 9.8.2010, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: нет
Всего: 43



Цитата

какую-нибудь "красивую" мысль 


и добавить группу(  но не просто группу, а сразу с какими-то студентами, т.е. это операция включает предыдущую  ).
PM MAIL   Вверх
Vasay
Дата 9.8.2010, 22:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2097
Регистрация: 8.3.2006

Репутация: нет
Всего: 73



MrNoob, 

one-to-many  ?


--------------------
Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны.
PM MAIL   Вверх
jk1
Дата 10.8.2010, 09:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1168
Регистрация: 17.10.2008
Где: Санкт-Петербург

Репутация: 1
Всего: 75



Вот такая схема в псевдокоде позволит создавать группу со студентами в одной транзакции, то есть откатить все при необходимости
Код

package dao

     class studentDAO{

           insert(){
                    // some dabase logic w/o transaction managment operations
                   }

           public insertStudent(){
                   beginTransaction();
                   insert();
                   endTransaction();                            
                   }
     }

     class groupDAO{

             public insertGroup(){
                     beginTransaction();
                     for(Student:students)
                              studentDAO.insert();
                     endTransaction(); 
                    }

      }



Это сообщение отредактировал(а) jk1 - 10.8.2010, 09:39


--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
AntonSaburov
Дата 10.8.2010, 09:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: нет
Всего: 118



По идее все надо сделать в рамках одной транзакции. А по коду получается, что для вставки группы транзакция и для вставки каждого студента тоже транзакция. Странно.
PM MAIL WWW ICQ   Вверх
MrNoob
Дата 10.8.2010, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 16.11.2009

Репутация: нет
Всего: нет



Нашел статейку с описанием проблемы, вроде относящейся к моей. Разбираюсь...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Design, Quality, Testing | Следующая тема »


 




[ Время генерации скрипта: 0.0461 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.