Spring-Hibernate Отношение один ко многим - PullRequest
0 голосов
/ 19 сентября 2011

у нас есть три таблицы People (id, name), Registrations (id, p_id, sub_id, sem, date), Subjects (id, name, Инструктор) ... Я хочу знать, какой правильный слой для написания логикисохранить список объектов регистрации в БД?Я имею в виду, что в настоящее время у меня есть следующий код в классе ResitrationController ..

@RequestMapping(..)
public String addRegistrations(@RequestParam(value="personId", required=true) int personId, @RequestParam(value="subjectIdList", required=true) List<Integer> subjectIdList){

 List<Registrations> registrationList = new ArrayList<Registrations>();

 for(int subjectId : subjectIdList){

     Registration registration = new Registration();
     registration.setSem("fall-11");
     registration.setDate(new Date());
     registration.setPerson(personService.getPersonById(personId));
     registration.setSubject(subjectService.getSubjectById(subjectId));

     registrationList.add(registration);
}
registrationService.addRegistrations(registrationList);
}

Метод addRegistration RegistrationService просто вызывает тот же метод для RegistrationDao RegistraionService () {@Autowired REgistraionDao regDao;

    @Transactional
    addRegistration(registrationList){
         regDao.addRegistration(registrationList);         
    }
  }

   RegistrationDao(){
    @Autowired SessionFactory sessionFactory;

    addRegistration(registrationList){
          for(Registration registration: registrationList){
              sessionFactory.getCurrentSession().save(registration);
          }
    }
    }

IХотите знать, правильно ли использовать эту логику в методе контроллера или перенести ее в другое место?Я действительно хочу отправить список регистраций методу RegistrationService, потому что я хотел бы, чтобы вся транзакция откатывалась, даже если один из объектов не был сохранен .. спасибо

1 Ответ

1 голос
/ 26 сентября 2011

Код выше работает?Это работает, но не транзакционно?

В любом случае, я считаю, что вы должны добавить управляемых объектов в registrationList.Таким образом, они должны быть сохранены и перепрошиты перед вызовом метода add ().Это должно быть сделано внутри транзакции.Так что, по моему мнению, вам лучше сделать это в каком-то классе "менеджера".это было бы дополнительным препятствием между контроллером и вашими DAO или, возможно, вашими классами обслуживания (это зависит от того, для чего вы используете свой уровень обслуживания).

...