Ich habe ein Problem mit der Sitzung auf der internen Klasse anonymus im Winterschlaf mit Spring Session Factory. Hier ist der Code:Hibernate-Sitzung innerhalb der inneren Klasse
public class DomainDaoImpl extends BasicDaoImpl<Domain> implements Iterable<Collection<Domain>> {
...
@Override
public Iterator<Collection<Domain>> iterator() {
return (new Iterator<Collection<Domain>>() {
private int counter = 0;
public static final int LIMIT = 100;
...
@Override
@Transactional(readOnly = true)
public Collection<Domain> next() {
final Criteria criteria = getCurrentSession().createCriteria(Domain.class);
final LinkedHashSet<Domain> result = new LinkedHashSet<Domain>();
List resultList = null;
while (!(resultList = criteria.list()).isEmpty()) {
criteria.setFirstResult((counter++ * LIMIT) + 1);
criteria.setMaxResults(LIMIT);
result.addAll(resultList);
}
return result;
}
...
});
Die Frage ist org.hibernate.HibernateException: Keine Session gefunden für aktuellen Thread dies in der Regel passiert, wenn DAO-Methode nicht innerhalb der Transaktion ist. Also, wie man es mit einer inneren Klasse arbeiten lässt?
Danke für die Antwort, ich habe es versucht, bevor Sie ohne Erfolg gefragt. Und ich möchte nicht, dass der Aufrufer für die Transaktionsverwaltung verantwortlich ist, weil ich @Transactional in meiner Serviceebene nicht möchte. –
vielleicht können Sie einige Patches in 'getCurrentSession()' wie getCurrentSession() von sessionFactory machen, wenn nicht verfügbar, dann verwenden Sie 'openSession()', natürlich müssen Sie es manuell schließen, wenn eine neue Sitzung geöffnet wurde. –
es funktionierte :-) Wie auch immer, lass uns warten, ob es einen anderen Vorschlag gibt –