2011-03-20 32 views
24

मेरी इकाई प्रबंधक जारी है() अनुक्रम से आईडी प्राप्त करता है और इसे मेरे छवि ऑब्जेक्ट में रखता है लेकिन छवि ऑब्जेक्ट स्वयं डेटाबेस में दिखाई नहीं दे रहा है। EntityManager.flush() एक त्रुटि देता है इसलिए मैं इस तरह से प्रतिबद्ध नहीं कर सकता। मेरा कोड यहाँ है।EntityManager (0) डेटाबेस को कुछ भी सहेज नहीं रहा है

@Repository 
public class ImageDaoImpl extends BaseDao implements ImageDao { 

@PersistenceContext 
protected EntityManager entityManager; 

@Override 
@Transactional 
public void create(Image image) {  
    JpaTemplate jpaTemplate = getJpaTemplate(entityManager); 
    jpaTemplate.persist(image); 
} 

 

@Repository 
public class BaseDao { 

private JpaTemplate jpaTemplate; 


public JpaTemplate getJpaTemplate(EntityManager entityManager){ 
    if(jpaTemplate == null) 
     jpaTemplate = new JpaTemplate(entityManager); 
    return jpaTemplate; 
} 

 

<bean id="entityManagerFactory" 
     class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" 
     p:dataSource-ref="dataSource"> 
     <property name="jpaVendorAdapter"> 
      <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> 
       <property name="showSql" value="true" /> 
       <property name="generateDdl" value="true" /> 
       <property name="databasePlatform" value="org.hibernate.dialect.PostgreSQLDialect" /> 
      </bean> 
     </property> 
     <property name="persistenceUnitName" value="sample"></property> 
    </bean> 



    <!-- DataSource Setup --> 
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
     <property name="driverClassName" value="org.postgresql.Driver" /> 
     <property name="url" value="jdbc:postgresql://localhost:5432/imageCapture" /> 
     <property name="username" value="myusername" /> 
     <property name="password" value="mypassword" /> 
    </bean> 


    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
     <property name="entityManagerFactory" ref="entityManagerFactory" /> 
    </bean> 

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

जो जेपीए/वसंत संस्करण आप उपयोग कर रहे हैं? – Premraj

+0

वसंत 3.05 @ फाल्कन – ivar

+0

मुझे जेपीए संस्करण में दिलचस्पी है .. जेपीएम्प्लेट से छुटकारा पाएं .. आपकी समस्या का समाधान नहीं होगा लेकिन अच्छा होगा – Premraj

उत्तर

26

यह आम तौर पर तब होता है जब लेनदेन लागू नहीं होता .. मुझे संदेह है @ ट्रांसेक्शनल इंटरसेप्टर ठीक से अवरोध नहीं कर रहा है।

+0

जांचने के लिए एक और बात: सुनिश्चित करें, '@ लेनदेन' एनोटेशन पैकेज 'org.springframework.transaction.annotation' से है, न कि' javax.transaction' - दूसरा मेरा मामला काम नहीं कर रहा था। – Gondy

24

जारी रहती है() "में कामयाब एंट्री में वस्तु जोड़ें" का मतलब है। डेटा बेस पर ऑब्जेक्ट को सहेजने के लिए आपको फ्लश() विधि को कॉल करना होगा। लेकिन याद रखें कि आपको लेनदेन के अंदर कॉल करना होगा।

// संपादित करें: उदाहरण विधि सहेजें।

public void save(T t){ 
    // begin transaction 
    em.getTransaction().begin(); 
    if (!em.contains(t)) { 
     // persist object - add to entity manager 
     em.persist(t); 
     // flush em - save to DB 
     em.flush(); 
    } 
    // commit transaction at all 
    em.getTransaction().commit(); 
} 

यह सबसे अच्छा नहीं है जिसे आप कर सकते हैं, लेकिन काफी अच्छा है।

+7

फ्लश() को किसी भी तरह से प्रतिबद्ध करने से पहले कहा जाता है। – bestsss

+0

जोड़ा गया इकाई प्रबंधक.फ्लश() और javax.persistence मिला। ट्रांसक्रिप्शन आवश्यक है: कोई लेनदेन प्रगति पर नहीं है – ivar

+0

Ivar देखो संस्करण –

0

अपने mvc-dispatcher-servlet.xml देखें। यहां <context:component-scan base-package="pass"/> पास पैकेज के बराबर होना चाहिए जहां आपके नियंत्रक

संबंधित मुद्दे