मुझे अपनी समस्या का हल ढूंढने में कठिनाई हो रही है।
मेरे पास एक सेवा वर्ग है, जिसमें लॉगिन पर सत्यापन ध्वज सेट करने का एक तरीका है।TransactionRequiredException: अद्यतन/हटाए गए क्वेरी को निष्पादित करना
@Service("userRolesService")
@Repository
@Transactional
public class UserRolesService {
public void verify() {
repository.verifyUser();
}
}
मेरे भंडार एक SpringData CrudRepository है, और verifyUser तरह
@Modifying
@Query("UPDATE user SET (verified = 1 WHERE verified=0)")
public void verifyUser();
जब सीधे कोड बुला एक इकाई परीक्षण में, सब कुछ ठीक काम करता है कुछ है।
javax.persistence.TransactionRequiredException
:: जब आवेदन के माध्यम से अपने प्रमाणीकरण प्रदाता से यह बुला रहा निम्नलिखित अपवाद एक अद्यतन निष्पादित/हटाने क्वेरी
सेवा वर्ग दोनों मेरे यूनिट टेस्ट और प्रमाणीकरण प्रदाता में इंजेक्ट किया जाता @Autowired
एनोटेशन का उपयोग कर। परीक्षण में स्वयं कोई दिलचस्प टिप्पणी नहीं होती है, न ही प्रमाणीकरण प्रदाता करता है।
मैं विचारों से ताजा हूं, इसलिए यदि किसी के पास कोई सुराग है, तो मैं बहुत आभारी हूं।
संपादित करें: सत्यापन उपयोगकर्ता अद्यतन स्क्रिप्ट को कॉल करने के बजाय अब मैं सभी असत्यापित उपयोगकर्ताओं को पुनर्प्राप्त करता हूं, सत्यापित ध्वज सेट करता हूं और भंडार की बचत() विधि का उपयोग करता हूं। यह काम करता है, लेकिन बहुत बदसूरत है, इसलिए मैं बेहतर सुझावों के लिए खुला हूं।
EDIT2:
अनुरोध यहां प्रति config के हठ हिस्सा है, मुझे लगता है कि यह सबसे अधिक प्रासंगिक है, बाकी केवल प्रमाणीकरण से संबंधित है। इस कॉन्फ़िगरेशन का उपयोग यूनिट परीक्षण और वेब ऐप दोनों में किया जाता है, केवल अंतर यह है कि डेटा स्रोतों को यूनिट परीक्षणों और वेब ऐप के लिए MySQL के लिए एच 2 डीबी एम्बेडेड किया जाता है।
<beans [..]>
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"
depends-on="persistenceInitializer">
<property name="dataSource" ref="dataSource"/>
<property name="persistenceUnitName" value="jpa"/>
<property name="packagesToScan">
<list>
<value>com.example.model</value>
</list>
</property>
<property name="jpaVendorAdapter">
<bean class="com.example.persistence.adapter.ConfigurationRetainingHibernateJpaVendorAdapter">
<property name="database" value="${spring.hibernate.database}"/>
<property name="generateDdl" value="${spring.hibernate.generateDdl}"/>
</bean>
</property>
<property name="jpaProperties">
<props>
<prop key="hibernate.ejb.naming_strategy">org.hibernate.cfg.DefaultComponentSafeNamingStrategy
</prop>
</props>
</property>
</bean>
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>
<jpa:repositories base-package="com.example.persistence.repository"/>
<tx:annotation-driven/>
<bean id="persistenceInitializer" class="com.example.persistence.init.NoOpInitializer"/>
</beans>
साथ ही मैं एक config है कि केवल वेब एप्लिकेशन में, नहीं इकाई परीक्षण है:
<beans [..]>
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:application.properties</value>
</list>
</property>
</bean>
<mvc:annotation-driven/>
<mvc:default-servlet-handler/>
<context:annotation-config/>
</beans>
आपके द्वारा पोस्ट की हैं अपने स्प्रिंग जोड़कर हल config? ऐसा लगता है कि आपके लेनदेन पोस्ट प्रोसेसर को बीन नहीं मिल रहा है? – MarkOfHall
निश्चित बात, दो कॉन्फ़िगरेशन भागों को जोड़ा गया। कॉन्फ़िगर कई फ़ाइलों में विभाजित है, उनमें से अधिकतर इस समस्या के लिए प्रासंगिक नहीं होना चाहिए। – pushy