Я новичок в Spring и подал заявку на регистрацию / регистрацию после обучения по YouTube, но я хочу добавить новую функциональность, которая позволяет удалять ученика. Я использовал @Transactional для моего метода удаления и соответственно изменил XML-файл, но я получаю эту ошибку:
Message Request processing failed; nested exception is org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named 'platformTransactionManager' is expected to be of type 'org.springframework.transaction.PlatformTransactionManager' but was actually of type 'com.infotech.service.impl.StudentServiceImpl'
мой класс обслуживания
@Service("studentService")
public class StudentServiceImpl implements StudentService {
@Autowired
private StudentDAO studentDAO;
public void setStudentDAO(StudentDAO studentDAO) {
this.studentDAO = studentDAO;
}
public StudentDAO getStudentDAO() {
return studentDAO;
}
//other methods
@Override
public void delete(String email) {
getStudentDAO().delete(email);
}
}
мой класс DAO
@EnableTransactionManagement
@Repository("studentDAO")
public class StudentDAOImpl implements StudentDAO {
@Autowired
private HibernateTemplate hibernateTemplate;
public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
this.hibernateTemplate = hibernateTemplate;
}
public HibernateTemplate getHibernateTemplate() {
return hibernateTemplate;
}
@Autowired
private SessionFactory sessionFactory;
protected Session getSession() {
return (Session) sessionFactory.getCurrentSession();
}
//other methods
@Transactional("platformTransactionManager")
public void delete(String email) {
Student student = (Student) ((HibernateTemplate) getSession()).get(Student.class, email);
((HibernateTemplate) getSession()).delete(student);
}
}
В сервлете диспетчера я определил компоненты InternalResourceViewResolver, dataSource, hibernateTemplate, sessionFactory, а затем добавил еще один компонент
<tx:annotation-driven transaction-manager="platformTransactionManager"/>
<bean id= "platformTransactionManager"class="com.infotech.service.impl.StudentServiceImpl">
</bean>
Наконец, это контроллер
@Controller
public class MyController {
@Autowired
private StudentService studentService;
public void setStudentService(StudentService studentService) {
this.studentService = studentService;
}
public StudentService getStudentService() {
return studentService;
}
//...RequestMappings...
@RequestMapping(value = "/delete/{email}", method = RequestMethod.GET)
public ModelAndView delete(@PathVariable("email") String email) {
studentService.delete(email);
return new ModelAndView("redirect:/view/home");
}
...
}
Теперь, как мне сделать мой компонент типа PlatformTransactionManager?
Но больше всего я думаю, что есть более простой способ удалить поле из моей таблицы, возможно, вообще без использования @Transaction, так что кто-нибудь может помочь мне понять, почему я получаю ошибку, и объяснить, что такое @Transactional и действительно ли я должен его использовать в этом случае?
Помните, что я НОВЫЙ к весне, у меня все еще нет многих понятий, поэтому извините, если я написал что-то совершенно глупое: -)