我試圖將SDN(4.2.0.M1
)和neo4j-ogm(2.0.5
)的版本升級到最新快照4.2.0.BUILD-SNAPSHOT
和2.1.0-SNAPSHOT
。SDN遷移到4.2:@Transactional如何工作?
按照遷移指南和其他SO問題的一些建議,我已經包裝了所有與neo4j 會話和@Transactional
交互的方法。它在大多數情況下工作正常,但仍有一些例外(Transaction is not current for this thread
),我無法理解。
讓我舉一個例子:
@Service
public class ContactServiceImpl implements ContactService {
@Inject
private Session session;
//...
@Override
@Transactional
public void addContact(String userId, String contactId) {
Contact contact = new Contact();
// Fill contact data
session.save(contact);
}
@Override
public void addContacts(String userId, Set<User> newContacts) {
for (User contact : CollectionUtils.emptyIfNull(newContacts)) {
addContact(userId, contact.getId());
}
}
}
在這裏,我只能用@Transaction
的addContact
註釋的方法,因爲它是與SDN direcly交互的唯一一個,至少這是我的想法:)
但是,如果我叫addContacts
方法,它只是一個迭代列表並調用註解addContact
方法,它失敗,之前提到的異常。如果我也註釋這種方法,它只是運作良好,但我不明白爲什麼。也許我錯過了一些關於spring @Transactional
註解行爲的基礎知識,所以很抱歉,如果這是一個毫無意義的問題。
任何人都可以澄清爲什麼我需要註釋兩種方法嗎? 在此先感謝
如果您需要更多詳細信息,請添加評論,我會擴展我的答案。 – digx1
謝謝@ digx1!在問這個問題之前,我應該多查找一下,但我理所當然地認爲這個問題可能與SDN遷移有關,我的錯誤:)感謝這兩個鏈接,現在都是有道理的 – troig