通过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了。具体怎么用请看相关文档,我说的不是很清楚。

 

 

 

你可能感兴趣的:(sql语句)