私はSpringでhibernateを設定しようとしています。私が得ることができないことに気付きました。
Bean.getBean(GenericDao.class).getCurrentSession();
私はクローズセッションのみ取得できます。
openSession()
メソッドでも同じことをやります - 有効なセッションを受け取ります。
質問は次のとおりです:なぜですか?私はGoogleで研究していますが、回答が見つかりませんでした。誰か知っていますか?なぜSpring以外のセッションが閉じられるのでしょうか?Context
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.io.Serializable;
import java.util.List;
@Transactional (propagation = Propagation.REQUIRED, rollbackFor = { Throwable.class })
public abstract class GenericDao {
@Autowired
protected SessionFactory sessionFactory;
public Session getCurrentSession() {
return sessionFactory.getCurrentSession();
}
public Session openSession() {
return sessionFactory.openSession();
}
public void saveOrUpdate(final Serializable object) {
getCurrentSession().saveOrUpdate(object);
}
public void delete(final Serializable object) {
getCurrentSession().delete(object);
}
public void save(final Serializable object) {
getCurrentSession().save(object);
}
public void update(final Serializable object) {
getCurrentSession().update(object);
}
public void merge(final Serializable object) {
getCurrentSession().merge(object);
}
@SuppressWarnings ("unchecked")
public <T> List<T> list(final Class<T> clazz) {
return getCurrentSession().createCriteria(clazz).list();
}
@SuppressWarnings ("unchecked")
public <T> T get(final Class<T> clazz, final Serializable id) {
return (T) getCurrentSession().get(clazz, id);
}
}
@Repository
@Primary
class GenericDaoImpl extends GenericDao {
}
これは、春の中で生まれたコンテキストで、セッションが 'getCurrenSession()'メソッドから得られることは不可能であることを意味します。私はあなたを正しく理解しましたか? – Dante
あなたのケースでは、Springによってhibernateコンテキストが管理されます。そして、 'getCurrenSession()'メソッドからセッションを取得することは可能ですが、 'hibernate.current_session_context_class'プロパティ値を適切に設定する必要があります。つまり、セッションをフェッチする前にセッションを閉じる可能性のある既存のjtaトランザクション(セッション)です。 –
さて、状況がより明確になった...返信いただきありがとうございます。私はそれを確認します – Dante