【发布时间】:2016-10-13 15:58:34
【问题描述】:
我正在尝试使用 hibernate 配置 spring,但我注意到我无法获得的一件事:当我尝试从 Container 获取 Session 对象时。Bean.getBean(GenericDao.class).getCurrentSession(); 我只能关闭会话。
如果我对 openSession() 方法做同样的事情 - 我会收到有效的会话。
那么接下来的问题是:为什么?我一直在谷歌研究,但没有找到答案。有人知道吗?
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 {
}
【问题讨论】:
标签: java spring hibernate session