迁移Hibernate 3到Hibernate 5. GethibernateTemplate()和HibernateC



以下代码是由Hibernate 3开发的。

public List<Employee> getAllSalaryPersons () {
    List<Employee> empSalList= super.getHibernateTemplate().execute(new HibernateCallback<List<Employee>>(){
        public List<Employee> doInHibernate(Session session) throws HibernateException  {
            Criteria criteria  = session.createCriteria(Salary.class, "sclass")
                    .createAlias("salary", "salary")
                    .add(Restrictions.le("sclass.salary", 25000))
                    .add(Restrictions.gt("sclass.salary", 99000))
                    .setProjection(
                            Projections.projectionList().addOrder( Order.asc("sclass.experiance") );
            criteria.setResultTransformer( new AliasToBeanResultTransformer(Employee.class));
            return criteria.list();
        }
    });
    return empSalList;
}

我将完全避免使用HibernateTemplate(其包装名称随着每个主要的Hibernate版本更改(,而是使用SessionFactory

这样,当您最终升级到Hibernate 6或7 ...

时,您不必再次更改代码
@Autowired
private SessionFactory sessionFactory;
public List<Employee> getAllSalaryPersons () {
    Criteria criteria  = sessionFactory.getCurrentSession().createCriteria(Salary.class, "sclass")
            .createAlias("salary", "salary")
            .add(Restrictions.le("sclass.salary", 25000))
            .add(Restrictions.gt("sclass.salary", 99000))
            .setProjection(Projections.projectionList())
            .addOrder(Order.asc("sclass.experiance")) ;
    criteria.setResultTransformer( new AliasToBeanResultTransformer(Employee.class));
    return criteria.list();        
}

最新更新