Java Hibernate标准结果映射到类/Bean

Java Hibernate标准结果映射到类/Bean,java,hibernate,Java,Hibernate,我想找第三高的薪水 结果应该是:“马克”,“黑斯廷斯”,性别。男性,60000,“美国” 这是数据 Employee employee1 = new Employee("Mark", "Hastings", Gender.male, 60000,"USA"); Employee employee2 = new Employee("Steve", "Pound", Gender.male, 45000, "USA"); Employee employee3 = new Employee("Ben"

我想找第三高的薪水

结果应该是:“马克”,“黑斯廷斯”,性别。男性,60000,“美国”

这是数据

Employee employee1 = new Employee("Mark", "Hastings", Gender.male, 60000,"USA");
Employee employee2 = new Employee("Steve", "Pound", Gender.male, 45000, "USA");
Employee employee3 = new Employee("Ben", "Hoskins", Gender.male, 70000, "USA");
Employee employee4 = new Employee("Philip", "Hastings",Gender.male, 45000, "USA");
Employee employee5 = new Employee("Mary", "Lambeth",Gender.female, 30000, "UK");
Employee employee6 = new Employee("Valarie", "Vikings",Gender.female, 35000,"UK");
Employee employee7 = new Employee("John", "Stanmore",Gender.male, 80000, "UK");
Employee employee8 = new Employee("Ben", "Hoskins", Gender.male,70000, "USA");
Employee employee9 = new Employee("Geir", "Ruine", Gender.male, 70000, "USA");
以下是我的hibernate代码:

final StandardServiceRegistry registry = new StandardServiceRegistryBuilder().configure().build();

        try {

            SessionFactory sessionFactory = new MetadataSources(registry).buildMetadata().buildSessionFactory();

            Session session = sessionFactory.openSession();
            session.beginTransaction();

            ProjectionList projectionList = Projections.projectionList();
            projectionList.add(Projections.property("salary"));
            projectionList.add(Projections.property("firstName"));
            projectionList.add(Projections.property("lastName"));
            projectionList.add(Projections.property("Country"));
            projectionList.add(Projections.property("gender"));

            Criteria criteria = session.createCriteria(Employee.class);
            criteria.setFirstResult(3);
            criteria.setMaxResults(1);
            criteria.setProjection(Projections.distinct(projectionList));
            criteria.addOrder(org.hibernate.criterion.Order.desc("salary"));
        //  criteria.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
            criteria.setResultTransformer(Transformers.aliasToBean(Employee.class));
            Employee emp = (Employee) criteria.list().get(0);
            System.out.println(emp.getCountry());

            session.getTransaction().commit();
            session.flush();
            session.clear();

            session.close();

        } catch (Exception e) {
            e.printStackTrace();
            StandardServiceRegistryBuilder.destroy(registry);
        }
    }
这给了我一个空值的employee对象

但是 当我进行Transformers.ALIAS\u TO\u ENTITY\u映射或Transformers.TO\u List时,我会以hashmap和String列表的形式得到结果


建议我如何转换为bean,即Employee对象

如果要获取员工实例,为什么要使用投影?只要不使用任何投影和任何结果转换器,查询就会返回一个列表。坦率地说,鉴于您的查询是静态的,标准JPQL查询将更具可读性和简洁性:
通过e.salary desc从员工e order中选择e
。我知道这可以通过HQL/SQL实现,但我不想使用HQL或SQL查询。我想使用criteria对象。正如我所说的:删除你的投影和结果转换器。你能写代码并告诉我,这到底是什么意思吗。如果没有重复记录,则删除投影和结果变换可以正常工作。如何处理重复记录?
        Criteria criteria = session.createCriteria(Employee.class);
        criteria.addOrder(Order.desc("salary"));
        criteria.setFirstResult(3);// 0 based index; set 0 for 1st hishest salary,1 for second highest salary
        criteria.setMaxResults(1);
        criteria.setProjection(Projections.distinct(Projections.property("salary")));
        int hishest = (Integer) criteria.uniqueResult();