मैं स्प्रिंग 3 (.0.2.RELEASE) और जेपीए 2 और हाइबरनेट 3.5.1-फाइनल की कोशिश कर रहा हूं ... एक चीज मुझे परेशान करती है कि वसंत केवल एक लेनदेन प्रबंधक को " transactionManager "जब लेन-देन प्रबंधक को "लेनदेन प्रबंधक" नाम नहीं दिया जाता है
मैं इसे नामित नहीं करते हैं" transactionManager ", स्प्रिंग फेंकता होगा NoSuchBeanDefinitionException: नहीं सेम 'transactionManager' परिभाषित किया गया है नाम दिया है।
यहाँ मेरी config है:
<context:component-scan base-package="destiny.data.mining"/>
<context:annotation-config/>
<bean id="miningEntityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="persistenceUnitName" value="mining"/>
</bean>
<bean id="miningTransactionManager" class="org.springframework.orm.jpa.JpaTransactionManager" >
<property name="entityManagerFactory" ref="miningEntityManagerFactory"/>
</bean>
<tx:advice id="txAdviceMining" transaction-manager="miningTransactionManager">
<tx:attributes>
<tx:method name="get*" read-only="true"/>
<tx:method name="save*" propagation="REQUIRED"/>
<tx:method name="update*" propagation="REQUIRED"/>
<tx:method name="delete*" propagation="REQUIRED"/>
<tx:method name="*" propagation="SUPPORTS" read-only="true"/>
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut id="methods" expression="execution(* destiny.utils.AbstractDao+.*(..))"/>
<aop:advisor advice-ref="txAdviceMining" pointcut-ref="methods"/>
</aop:config>
<tx:annotation-driven transaction-manager="miningTransactionManager"/>
इस config में, एक इकाई प्रबंधक फैक्टरी है नहीं जरूरी "entityManagerFactory", और "txAdvice" नाम दिया गया है नहीं जरूरी, नाम "txAdvice" या तो। लेकिन मुझे नहीं पता कि पृथ्वी पर वसंत के लिए "लेनदेन प्रबंधक" नामक एक लेनदेन प्रबंधक की आवश्यकता क्यों है?
कोई लेनदेन प्रबंधक "लेनदेन प्रबंधक" नाम देने का कोई तरीका नहीं है? (मैं कई वसंत config फ़ाइलों चल रहा हूँ, इसलिए मैं नाम परस्पर विरोधी से बचने के लिए पूरी कोशिश)
परीक्षण कोड:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:mining.xml"})
public class MiningPersonDaoTest
{
@Inject
private EntityManagerFactory miningEntityManagerFactory;
@Inject
private MiningPersonDao miningPersonDao;
@Transactional
@Test
public void testUpdate()
{
MiningPerson p = miningPersonDao.get(42L);
p.setLocationName("OOXX");
miningPersonDao.update(p);
System.out.println(p);
}
}
धन्यवाद! यह हल हो गया है! – smallufo
लेकिन मैं अभी भी चिंतित हूं कि डीएओ को अन्य ढांचे (जैसे विकेट) में इंजेक्शन दिया गया है, क्या यह अभी भी विकेट के घटक को @ ट्रान्सएक्शन कॉन्फ़िगरेशन जोड़ने में सक्षम है? – smallufo
आपको यह सुनिश्चित करने के लिए प्रयास करना होगा, लेकिन मुझे लगता है कि "असली" संदर्भ में, आपको किसी भी टिप्पणी की आवश्यकता नहीं होगी - वसंत बीन आईडी के आधार पर सही लेनदेन प्रबंधक को देखेगा। अच्छा होगा अगर आप यहां अपने परिणाम पोस्टरिटी के लिए भी पोस्ट कर सकते हैं। –