我有这个代码
query = session.createSQLQuery("select e.emp_id, emp_name,
emp_salary,address_line1, city,
zipcode from Employee e, Address a where a.emp_id=e.emp_id");
rows = query.list();
for(Object[] row : rows){
Employee emp = new Employee();
emp.setId(Long.parseLong(row[0].toString()));
emp.setName(row[1].toString());
emp.setSalary(Double.parseDouble(row[2].toString()));
Address address = new Address();
address.setAddressLine1(row[3].toString());
address.setCity(row[4].toString());
address.setZipcode(row[5].toString());
emp.setAddress(address);
System.out.println(emp);
}
我正在从查询中获取数据并将其设置为for每个循环。但是我现在想像这样设置值
emp.setName(row[1].toString());
我想获取具有列名的数据。因此,如果select语句中有100列,我必须在行数组中给0-99
编号。因此,如果说我不想在选择查询中的第46列,那么我必须将编号从46-98更改为。因此,有什么方法可以用列名来完成它。
注意:映射是通过查询而非实体/ pojo类完成的。
答案 0 :(得分:0)
如果要按列名获取数据,
query = session.createSQLQuery("select e.emp_id, emp_name,
emp_salary,address_line1, city,
zipcode from Employee e, Address a where a.emp_id=e.emp_id");
query.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP);
List empList= query.list();
for(Object object : empList) {
Map row = (Map)object;
Employee emp = new Employee();
emp.setId(Long.parseLong(row.get("id"));
emp.setName(row.get("name"));
}
答案 1 :(得分:0)
您可以对bean转换器org.hibernate.transform.AliasToBeanResultTransformer
使用别名。仅Bean的那些属性将具有values,其别名存在于数据库查询中。
例如
您BeanClass.java
就是这样
public class Employee{
Integer id;
String name;
// Getter Setters
}
session.createSQLQuery("select e.emp_id as id, emp_name as name");
query.setResultTransformer(new AliasToBeanResultTransformer(Employee.class));
List<Employee> employeeList = query.list();