Транзакции не сохраняются - Spring MVC с Hibernate - PullRequest
0 голосов
/ 11 декабря 2018

У меня есть приложение Spring MVC (4.1.6), использующее Hibernate ORM (5.3.7) поверх базы данных MySQL 8.

У меня есть представление с формой, которая должна создать строку вБД, когда она представлена, но это не так.Я могу сказать, что информация поступает в мой компонент @Service и компонент DAO @Repository.Я также могу успешно запрашивать данные из БД и отображать их в виде, если я обновляю БД напрямую через SQL.

Я прочитал несколько постов и попытался перенастроить XML-контекст своего приложения и контекста сервлета с помощьюнеудачно.Может кто-нибудь сказать мне, где я иду не так?

Ниже приведены некоторые фрагменты.

Web_XML

<context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            /WEB-INF/spring/applicationContext-dao.xml
            /WEB-INF/spring/applicationContext-security.xml
        </param-value>
    </context-param>

    <servlet>
        <servlet-name>appServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/spring/applicationContext-web.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

applicationContext-web.xml

<context:component-scan base-package="edu.neu.snowfinder">
        <context:include-filter expression="org.springframework.stereotype.Controller" type="annotation"/>
    </context:component-scan>

    <interceptors>
        <beans:bean class= "org.springframework.orm.hibernate4.support.OpenSessionInViewInterceptor">
            <beans:property name="sessionFactory" ref="sessionFactory"/>
        </beans:bean>
    </interceptors>

applicationContext-dao.xml

<bean id="sessionFactory" class = "org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <property name = "dataSource" ref = "dataSource"/>
        <property name = "configLocation">
            <value> classpath:hibernate.cfg.xml</value>
        </property>
    </bean>

    <tx:annotation-driven transaction-manager="transactionManager" />

    <bean id = "transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
        <property name="sessionFactory" ref = "sessionFactory"/>
        <property name="dataSource" ref = "dataSource"/>
    </bean>

UserServiceImpl

@Service
public class UserServiceImpl implements UserService {
    @Autowired
    @Qualifier("userHibernateDAO")
    private UserDAO userDAO;

    @Override
    @Transactional
    public void createUser(User user) {
        System.out.println("Does the Sevice have the user?"+user.getFirstname());
        userDAO.createUser(user);
    }

    @Override
    @Transactional
    public Collection<User> listUsers() {
        return userDAO.listUsers();
    }

}

UserHibernateDAO

@Repository
public class UserHibernateDAO implements UserDAO {

    @Autowired 
    private SessionFactory sessionFactory;

    @Override
    public void createUser(User user) {
        Session session = sessionFactory.getCurrentSession();
        session.beginTransaction();
        System.out.println("Does the DAO have the user?"+user.getFirstname());
        System.out.println("Does the DAO have a session?"+sessionFactory.getCurrentSession().toString());
        Serializable id = sessionFactory.getCurrentSession().save(user);
        session.getTransaction().commit();
        System.out.println("Whats the saved User's ID??"+id.toString());

    }

hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration SYSTEM 
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <property name = "hibernate.dialect">org.hibernate.dialect.MySQL8Dialect</property>
        <property name = "hibernate.showsql">true</property>
        <property name = "hibernate.formatsql">true</property>
        <property name = "hibernate.hbm2ddl.auto">create</property>
        <mapping class = "edu.neu.snowfinder.model.User"/>
   </session-factory>
</hibernate-configuration>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...