Спящий режим добавляет 2 записи в базу данных

#hibernate #spring-mvc

#спящий режим #spring-mvc

Вопрос:

Я впервые использую Spring MVC с Hibernate, и каждый раз, когда я добавляю что-то в базу данных, используя репозиторий, он вводит это дважды. Я попытался посмотреть, есть ли какие-то другие места, где создаются компоненты, и я ничего не смог увидеть

spring-servlet.xml

  <context:component-scan base-package="com.controllers"/>
<context:component-scan base-package="repositories"/>


<!-- This sets the default home page-->
<view-controller path="/" view-name="/login"/>
<!-- Sets the default path for all the Resources -->
<resources mapping="/resources/**" location="/resources/" />

<beans:bean id="dataSource"
            class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <beans:property  name="driverClassName" value="com.mysql.jdbc.Driver"/>
    <beans:property name="url"
                    value="jdbc:mysql://localhost:3306/yossi2"/>
    <beans:property name="username" value="root" />
    <beans:property name="password" value="yossi" />
</beans:bean>

<!-- Hibernate 4 SessionFactory Bean definition -->
<beans:bean id="sessionFactory"
            class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <beans:property name="dataSource" ref="dataSource" />
    <beans:property name="annotatedClasses">
        <beans:list>
            <beans:value>models.entities.CardInUse</beans:value>
            <beans:value>models.entities.Cards</beans:value>
            <beans:value>models.entities.Customer</beans:value>
            <beans:value>models.entities.Purchases</beans:value>
            <beans:value>models.entities.Subscription</beans:value>
            <beans:value>models.entities.UserCredentials</beans:value>
            <beans:value>models.entities.Vendor</beans:value>
        </beans:list>
    </beans:property>
    <beans:property name="hibernateProperties">
        <beans:props>
            <beans:prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect
            </beans:prop>
            <beans:prop key="hibernate.show_sql">true</beans:prop>
            <beans:prop key="hibernate.format_sql">true</beans:prop>
        </beans:props>
    </beans:property>
</beans:bean>

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

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

<beans:bean id="applicationContextProvder" class="com.controllers.ApplicationContextProvider"/>
  

 @RequestMapping(value = "/db")
public String dbTester(){
    UserCredentialsRepository userCredentialsRepository = applicationContext.getBean(UserCredentialsRepository.class);
    UserCredentials user = new UserCredentials();
    user.setUsername("yossisilb");
    user.setPassword("hello");
    user.setGroup("admin");
    user.setVendor(null);

    userCredentialsRepository.saveUserCreds(user);
   return "vendorLanding";
}
  

И мой репозиторий:

     @Repository
public class UserCredentialsRepository implements repositories.UserCredentialsRepository {

@Autowired
public SessionFactory sessionFactory;

@Transactional
public void saveUserCreds(UserCredentials creds) {
    sessionFactory.getCurrentSession().save(creds);
}
  

Комментарии:

1. Вы отправляете на контроллер дважды? Как выглядит ваша страница?

2. Да, вы правы, это вызывается дважды. Почему это происходит?

3. Я удалил прослушиватель контекста, и теперь он создает контроллер только один раз, но метод все еще вызывается дважды

4. Возможно, у вас проблема с двойным сообщением? Вы можете запустить http-прокси для отладки, такой как Fiddler, или просто использовать вкладку «Сеть» в Chrome developer tools, чтобы посмотреть, дважды ли отправляется URL-адрес.