#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-адрес.