2014-05-22 2 views
0

이것은 테스트 프로그램입니다. 데이터베이스의 표는 ID 및 이름이 열 인 학생입니다. POJO 클래스는 속성HQL 쿼리에 문제가 있습니까?

로 ID와 이름을 가진 학생입니다 servlet1에 사용

HQL 쿼리는 다음과 같습니다

List<Student> l = ses.createQuery("select s.id, s.name from Student s").list(); 

     out.println("Database students are as follows:<br/>"); 
     Iterator it= l.iterator(); 
     while(it.hasNext()) 
     { 
      Object o[]= (Object[]) it.next(); 
      out.println("Student id is :"+o[0]); 
      out.println("<br/>"); 
      out.println("Student name is :"+o[1]); 
      out.println("<br/>"); 
     } 
servlet2에서

HQL 쿼리는 다음과 같습니다

servlet1에서
List<Student> l=ses.createQuery("from Student").list(); 
     out.println("Database students are as follows:<br/>"); 
     Iterator it= l.iterator(); 
     while(it.hasNext()) 
     { 
      Student s= (Student) it.next(); 
      out.println("Student id is :"+s.getId()); 
      out.println("<br/>"); 
      out.println("Student name is :"+s.getName()); 
      out.println("<br/>"); 
     } 

내가 학생 객체 대신를 사용하는 경우 개체 클래스 개체가 데이터베이스에서 검색되지 않는 이유는 무엇입니까?, 모든 것이 정상적으로 작동합니다.

내가 Student 객체 대신 Object 클래스 객체를 사용하면 데이터가 데이터베이스에서 검색되지 않는 이유는 무엇입니까?, 모든 문제가 정상적으로 처리됩니다.

답변

-1

첫 번째 쿼리에는 ID와 이름이 다른 유형이기 때문에 List로 변환 할 수없는 여러 절이 있습니다. 목록 유형이 될 것입니다.

두 번째 쿼리의 경우 학생 목록을 반환하므로 개체 유형으로 변환 한 다음 다시 학생 유형으로 변환하면 안됩니다. 자세한 내용은 여기 https://weblogs.java.net/blog/2007/04/25/java-persistence-query-return-types 링크를 참조하십시오.

0

l=ses.createQuery("from Student").list();을 호출 할 때 DB에서 전체 열 집합을 검색하므로 거기에서 Student 클래스를 올바르게 인스턴스화 할 수 있습니다.

+0

ok. l = ses.createQuery ("Student s에서 s.id, s.name 선택"). list(); 왜 Object 클래스가 사용되고 왜 Student 클래스가 사용되지 않습니까? – user3435052

+0

나는 당신이 컬럼을 사용할 때 사용 가능한 모든 컬럼을 사용하지 않을 수도 있다고 절전 모드에서 추측하고있다. –

+0

확인. hibernate가 모든 컬럼이 사용되었는지 또는 소수의 컬럼이 사용되는지를 결정할 수 없을 때 객체 클래스가 사용되는 이유는 무엇입니까? – user3435052

0

서블릿 1 & 2 : 당신은 당신이 PIN이하려고하는 객체의 종류를 언급 할 필요 있도록

List<Student> l = ses.createQuery("select s.id, s.name from Student s").list(); 

해당 쿼리는 개체의 반환 목록입니다.

ses.createQuery("select s.id, s.name from Student s").list(); 

는 학생 < ID, 이름을 반환

> 오브젝트 당신의

List<Object> it also return your Student(base object of list) Object.but it not good.so,we specifically mentioned what exact format Object type. 

두 경우 모두를 사용하려는 경우, 당신의 필요가 작동 주조 수행합니다.

List<Student> l =(List<Student>) ses.createQuery("select s.id, s.name from Student s").list(); 
List<Object> l =(List<Object>) ses.createQuery("select s.id, s.name from Student s").list();