स्प्रिंग, एक विधि अगर एक पहले से ही नहीं है कि @Transactional
साथ टिप्पणी की जाती है एक नया लेन-देन प्राप्त होगा प्राप्त नहीं करता है, लेकिन मैंने देखा है कि एक लेन-देन संबंधी विधि किसी भी प्राप्त नहीं करता है लेनदेन अगर इसे गैर-लेनदेन से बुलाया जाता है। कोड यहाँ है।@Transactional विधि किसी अन्य विधि से कहा जाता है एक सौदे
@Component
public class FooDao {
private EntityManager entityManager;
@PersistenceContext
protected void setEntityManager(EntityManager entityManager) {
this.entityManager = entityManager;
}
@Transactional
public Object save(Object bean) {
return this.entityManager.merge(bean);
}
public Object saveWrap(Object bean) {
return save(bean);
}
}
@Component
public class FooService {
private FooDao fooDao;
public void save(Object bean) {
this.fooDao.saveWrap(bean); // doesn't work.
this.fooDao.save(bean); // works
}
}
saveWrap()
एक नियमित रूप से विधि है कि save()
जो व्यवहार है कहता है, लेकिन saveWrap()
कोई भी परिवर्तन जारी रहती है नहीं होगा।
मैं वसंत 3 उपयोग कर रहा हूँ और हाइबरनेट 3. मैं गलत यहाँ क्या कर रहा हूँ? धन्यवाद।
@Transactional के साथ saveWrap विधि को एनोटेट करने में कोई हानि नहीं है। लेन-देन प्रचार के साथ डिफ़ॉल्ट व्यवहार आवश्यक है जिसका मतलब है कि आप एक नेस्टेड लेन-देन प्राप्त करने के लिए थे, तो (यानी। आप आ लेन-देन में हैं और फिर आप एक और तरीका जो भी @Transactional है कहते हैं) बस होगा मौजूदा लेन-देन का उपयोग करने और नहीं बना एक और अगर आप डरते हैं तो –
प्रॉक्सी पर cglib का उपयोग करने के बारे में कैसे? मुझे cglib प्रॉक्सी सलाह हर विधि याद है, भले ही आप इसे उसी कक्षा में बुलाएं। – hiway