BeanNotOfRequiredTypeException с PlatformTransactionManager - PullRequest
0 голосов
/ 28 марта 2019

Я новичок в 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 и действительно ли я должен его использовать в этом случае? Помните, что я НОВЫЙ к весне, у меня все еще нет многих понятий, поэтому извините, если я написал что-то совершенно глупое: -)

1 Ответ

0 голосов
/ 29 марта 2019

Spring ищет менеджера транзакций - он требует конкретной реализации интерфейса PlatformTransactionManager. Он получает реализацию вашего сервиса, а это не PlatformTransactionManager и не то, что ему нужно. Если вы используете JDBC, org.springframework.jdbc.datasource.DataSourceTransactionManager должно работать.

Попробуйте изменить:

<bean id= "platformTransactionManager" class="com.infotech.service.impl.StudentServiceImpl">

Кому:

<bean id= "platformTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...