我们有三个表人(id,name),注册(id,p_id,sub_id,sem,date), 主题(id,name,instructor)...我想知道写入逻辑以保存注册对象列表到db的正确层是什么?我的意思是目前我在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);
}
RegistrationService的addRegistration方法只是在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);
}
}
}
我想知道在控制器方法中使用此逻辑或将其转移到其他位置是否正确?我真的想向RegistrationService方法发送一个注册列表,因为我希望整个事务回滚,即使其中一个对象没有被持久化。谢谢
答案 0 :(得分:1)
上面的代码是否有效?它是否有效但不是交易性的?
无论如何,我相信您应该在registrationList
中添加托管对象。因此,在调用add()方法之前,需要对它们进行持久化和闪存。这应该在交易中完成。因此,在我看来,你最好在一些“经理”课程中做到这一点。这将是控制器和您的DAO之间的额外leyer,或者可能是您的服务类(这取决于您使用服务层的内容)。