staram pomocą parallelStream()
w DAO z Wiosna @Transactional
adnotacji i uzyskaj problem:Java .parallelStream() ze sprężyną odnotowany metody
@Transactional
public void processCollection(Collection<Object> objects) {
objects.parallelStream()
.forEach(this::processOne); //throw exception
}
@Transactional
public void processOne(Object o) {
...
}
Works poprawne:
@Transactional
public void processCollection(Collection<Object> objects) {
objects.stream()
.forEach(this::processOne); //work correctly
}
@Transactional
public void processOne(Object o) {
...
}
Wyjątek:
org.hibernate.HibernateException: No Session found for current thread
org.springframework.orm.hibernate4.SpringSessionContext.currentSession(SpringSessionContext.java:106)
org.hibernate.internal.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:978)
Jak używać metod opatrzonych komentarzem @Transactional
przez parallelStream()
?
Aktualizacja Dlaczego tak się stało Spring transaction manager and multithreading Ale mam nadzieję, że sprężyna 4 z Java 8 wsparcie może zapewnić pewne rozwiązanie tego problemu. Jakieś pomysły?
Pytanie trywialne, ale czy otrzymasz ten sam błąd, jeśli używasz strumienia(). Parallel()? –
Tak, mam ten sam problem ze strumieniem(). Parallel() – VladS
http://stackoverflow.com/questions/16835974/spring-transaction-manager-and-multithreading –