在Java Spring MVC中执行SQLQuery之后如何设置字段的值

时间:2019-03-08 04:27:44

标签: java sql spring hibernate-mapping

我有这个代码

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类完成的。

2 个答案:

答案 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();