Java 在hibernate中使用连接的最佳方式是什么
之前我使用了HibernateTemplate(spring 3),它可以自动打开和关闭连接。 但从春季4日起,冬眠模式将被取消。目前我正在使用HibernateUtil作为: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
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);
}