Hibernate Spring休眠一对多关系持久化
我们有三张表:人员(id、姓名)、注册(id、p_id、sub_id、sem、日期), 受试者(身份证、姓名、讲师)。。。我想知道什么是将注册对象列表持久化到数据库的正确层?我的意思是,目前我在ResitrationController类中有以下代码Hibernate Spring休眠一对多关系持久化,hibernate,spring-mvc,one-to-many,Hibernate,Spring Mvc,One To Many,我们有三张表:人员(id、姓名)、注册(id、p_id、sub_id、sem、日期), 受试者(身份证、姓名、讲师)。。。我想知道什么是将注册对象列表持久化到数据库的正确层?我的意思是,目前我在ResitrationController类中有以下代码 @RequestMapping(..) public String addRegistrations(@RequestParam(value="personId", required=true) int personId, @RequestPara
@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方法发送一个注册列表,因为我希望整个事务回滚,即使其中一个对象没有持久化。。谢谢上面的代码正常吗?它是否正常工作,但不是事务性的
无论如何,我认为您应该在
注册列表中添加托管对象。因此,在调用add()方法之前,需要对它们进行持久化和刷新。这应该在事务内部完成。所以在我看来,你最好在“经理”课上这样做。这将在控制器和DAO之间,或者可能在您的服务类之间(取决于您使用服务层的目的)。感谢Unixorn的回复,这是我在网上查看一些示例后所做的。。已创建注册管理器并自动连接所有必需的服务类。。
@Transactional
addRegistration(registrationList){
regDao.addRegistration(registrationList);
}
}
RegistrationDao(){
@Autowired SessionFactory sessionFactory;
addRegistration(registrationList){
for(Registration registration: registrationList){
sessionFactory.getCurrentSession().save(registration);
}
}
}