Java Hibernate标准结果映射到类/Bean
我想找第三高的薪水 结果应该是:“马克”,“黑斯廷斯”,性别。男性,60000,“美国” 这是数据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"
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();