2011-02-24 22 views
15

के बजाय डालने का प्रदर्शन करता है मेरे पास एक साधारण परीक्षण है, जहां मैं ऑब्जेक्ट को अपडेट करने का प्रयास कर रहा हूं, लेकिन विलय अद्यतन के बजाय एक सम्मिलन कर रहा है।जेपीए हाइबरनेट विलय अद्यतन

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = {"classpath:spring/app-context.xml","classpath:spring/testdb-context.xml"}) 
public class UserJPATest { 
@Test 
public void testUpdate() throws Exception { 
    System.out.println("update"); 

    User entity = ObjectManager.USER_DAO.findById(3L); 
    entity.setUsername("harryUpdate"); 

    ObjectManager.USER_DAO.update(entity); 

    User selEntity = ObjectManager.USER_DAO.findById(3L); 
    Assert.assertEquals(entity.getUsername(),selEntity.getUsername()); 
} 

}

यह मेरा अद्यतन विधि

@Override 
@Transactional(propagation= Propagation.REQUIRES_NEW) 
public T update(T entity) throws Exception { 
    try { 
     T merged = entityManager.merge(entity); 
     return merged; 
    } catch (Exception e) { 
     e.printStackTrace(); 
     throw new Exception(e); 
    } 
} 

कोड को अद्यतन है

@Override 
@Transactional(propagation= Propagation.REQUIRES_NEW) 
public T update(T entity) throws Exception { 
    try { 
     T merged = null; 
     BaseEntity baseEntity = null; 
     if(entity instanceof BaseEntity){ 
      baseEntity = (BaseEntity)entity; 
      merged = entityManager.find(entityClass, baseEntity.getId()); 
     } 
     merged = entityManager.merge(entity); 
     entityManager.flush(); 
     return merged; 
    } catch (Exception e) { 
     e.printStackTrace(); 
     throw new Exception(e); 
    } 
} 


अब मैं प्राप्त निम्न त्रुटि जेपीए लेन-देन स्वीकार नहीं कर सकीं; नेस्टेड अपवाद javax.persistence.RollbackException: रोलबैक के रूप में चिह्नित लेनदेन केवल

+0

अपडेट करने और हटाने के साथ सभी समस्याएं आप कैसे निर्धारित करते हैं कि यह सम्मिलित करता है? – axtavt

+0

मैं ** वास्तव में ** ** REQUIRES_NEW ** प्रचार की तरह नहीं हूं, तो आप एक TX में इकाई बना सकते हैं और फिर एक अलग TX में "विलय या अद्यतन" कर सकते हैं, जो मूल के बारे में नहीं जानता इकाई। – Augusto

+0

मैंने लॉग की जांच की है और यह – user373201

उत्तर

22

मेरे पास एक संस्करण कॉलम था जो डेटाबेस में बीज डेटा डालने पर सेट नहीं किया गया था। इसलिए

+0

से ऊपर कोड को अच्छी तरह से अपडेट किया है, मैं एक ही समस्या के पार आया .. :) –

+0

धन्यवाद उपयोगकर्ता 373201, मैं इसके साथ संघर्ष कर रहा था और जैसे ही मैंने संस्करण बदल दिया, मैं आपके सुझाव में आया, इसने काम करना शुरू कर दिया माना जाता था। धन्यवाद। – Richipal

+0

संस्करण कॉलम, जो एक भी है, मुझे भी एक ही समस्या है, मैंने डेटाबेस के सभी कॉलम सेट किए हैं, लेकिन यह अभी भी अपडेट करने के बजाय रिकॉर्ड डालने वाला है .help – Mufrah

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