Java 在hibernate中使用连接的最佳方式是什么

Java 在hibernate中使用连接的最佳方式是什么,java,spring,hibernate,Java,Spring,Hibernate,之前我使用了HibernateTemplate(spring 3),它可以自动打开和关闭连接。 但从春季4日起,冬眠模式将被取消。目前我正在使用HibernateUtil作为: public class HibernateUtil { private static final SessionFactory sessionFactory; static { sessionFactory = new AnnotationConfiguration().con

之前我使用了HibernateTemplate(spring 3),它可以自动打开和关闭连接。 但从春季4日起,冬眠模式将被取消。目前我正在使用HibernateUtil作为:

public class HibernateUtil {

    private static final SessionFactory sessionFactory;
    static {
            sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();

    }

    public static Session getSession(){
        return sessionFactory.openSession();
    }

    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }
} 
并在访问中作为:

Session s1 = HibernateUtil.getSession();

Transaction tx = s1.beginTransaction();
s1.save(er);

tx.commit();
s1.close();
这是一个简单的假人


这是使用它的正确方法还是有更好的替代方法?

因为您使用的是Spring,所以更好的方法是根本不手动管理事务,而是使用声明式事务管理,这样Spring将通过使用自己的事务管理器为您做这件事:

@Repository
公共类CarDaoImpl实现CarDao{
受保护的实体管理器实体管理器;
公共实体管理器getEntityManager(){
返回实体管理器;
}
@持久上下文
公共无效设置EntityManager(EntityManager EntityManager){
this.entityManager=entityManager;
}
@交易的
public List getCars()引发DataAccessException{
Query Query=getEntityManager().createQuery(“从车c中选择c”);
List resultList=query.getResultList();
返回结果列表;
}
@交易的
公共汽车getCar(长carId)抛出DataAccessException{
返回getEntityManager().find(Car.class,carId);
}
请参阅

@Repository
public class CarDaoImpl implements CarDao {

    protected EntityManager entityManager;

    public EntityManager getEntityManager() {
        return entityManager;
    }
    @PersistenceContext
    public void setEntityManager(EntityManager entityManager) {
        this.entityManager = entityManager;
    }

    @Transactional
    public List<Car> getCars() throws DataAccessException {
        Query query = getEntityManager().createQuery("select c from Car c");
        List<Car> resultList = query.getResultList();
        return resultList;
    }
    @Transactional
    public Car getCar(Long carId) throws DataAccessException {
        return getEntityManager().find(Car.class, carId);
    }