通过sql语句查询出来的结果字段没有到对应实体类时的处理方法
通过sql语句查询出来的结果字段没有到对应实体类时的处理方法,对于Person类获取用户第一个名字和年龄两个字段,常见的有两种方式:
1、在创建一个与查询结果字段对应的类,然后通过构造函数实现:
Query query = em.createQuery("select new com.ejb.bean.SimplePerson(p. firstname, p.age) from Person p ");
2、通过sql语句将查询结果放到Object数组中,然后再获取一个List集合,里面存放的是Object数组:
Query query = em.createNativeQuery("select p.firstname,p.age from person as p"); List list = query.getResultList(); for (int i = 0; i < list.size(); i++) { Object[] obj = (Object[]) list.get(i); System.out.println(" firstname: "+ obj[0]+" age: "+obj[1]); }
综上所述:建议还是使用第一种(字段比较多),因为它更符合面向对象的思想,获取数据也比较方便。
public class Person { private String firstname; private String secondname; private int age; public String getFirstname() { return firstname; } public void setFirstname(String firstname) { this.firstname = firstname; } public String getSecondname() { return secondname; } public void setSecondname(String secondname) { this.secondname = secondname; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
解决方案一,按照Object[]数据取出数据,然后自己组bean
解决方案二,对每个表的bean写构造函数,比如表一要查出field1,field2两个字段,那么有一个构造函数就是Bean(type1
filed1,type2 field2) ,然后在hql里面就可以直接生成这个bean了。具体怎么用请看相关文档,我说的不是很清楚。