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

问题描述 投票:0回答:2

我有这个代码

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 each循环中设置它。但是我想现在像这样设置值

emp.setName(row[1].toString());

我想用列名来获取数据。所以如果select语句中有100列,我必须在行数组中给出0-99编号。所以如果说第46列我不想在选择查询中那么我必须从46-98更改编号。那么有没有办法用列名完成它。

注意:映射是通过查询而不是实体/ pojo类完成的。

java sql spring hibernate-mapping
2个回答
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"));

 }

0
投票

您可以使用bean变换器org.hibernate.transform.AliasToBeanResultTransformer的别名。只有Bean的这些属性才有值,其别名存在于数据库查询中。

e.g

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();
© www.soinside.com 2019 - 2024. All rights reserved.