2017-06-24 4 views
0

Ich brauche etwas Hilfe ich habe neu zu überwintern Ich habe drei Tabellen mit inneren Joins beigetreten, die alle eins zu eins Zuordnung haben Ich bekomme das Ergebnis in der Liste, aber wie man iteriert Liste. Ich habe versucht, mit Iterator, aber nichts hilft bitte helfen Sie mir hier ist das Code-Snippet.Inner Join in hql und wie man iteriert

@Entity 
public class Laptop { 
@Id 
private int lid; 
private String lname; 
//getters and setter 

@Entity 
public class Validity{ 

@Id 
private int lid; 
private String validitydate; 
//getters and setter 
@Entity 
public class Student { 

@Id 
private int lid; 
private int rollno; 
private String name; 
private int marks; 


@OneToOne(cascade = CascadeType.ALL) 
@JoinColumn(name="lid") 
private Laptop laptop; 

@OneToOne(cascade=CascadeType.ALL) 
@JoinColumn(name="lid") 
private Validity validity; 
//getters and setters 

Abfrage, die ich

String hql = "Select s from Student s inner join s.laptop left join 
    s.validity where s.lid = 1 and s.marks = 45"; 


    Query query = session.createQuery(hql); 

    List<Object[]> list = query.list(); 

    Iterator it = list.iterator(); 
    Object[] obj = list.toArray(); 
    while(it.hasNext()) 
    { 
     Object ob = (Object)it.next(); 
     Student s = (Student)ob; 
     System.out.println("Student id is "+s.getLid()); 
     Laptop l = (Laptop)ob; // gives me error here cannot cast laptop to 
     student 
     System.out.println("laptop id is "+l.getLid()); 
     System.out.println("laptop name is "+l.getLname()); 

    } 

Antwort

1

Ihre Anfrage am Brennen ist

Select s from Student s where ... 

So ist es Instanzen von Studenten auswählt. Das Ergebnis ist ein List<Student>, kein List<Object[]>.

Verwenden Sie die richtige Art und die Verwendung von Abfragen eingegeben:

Query<Student> query = session.createQuery(hql, Student.class); 
List<Student> list = query.list(); 
for (Student student : list) { 
    ... 
} 
+0

aber ich mag Details von Laptop-Klasse sowie Gültigkeit der Klasse –

+0

Dann ist es eine gute Sache, dass Schüler mit einem Laptop und ein Gültigkeitsfeld haben . Und Sie können these verwenden student.getLaptop(), um den Laptop des Schülers zu bekommen. Sie denken nicht daran, das Prinzip von Klassen und Objekten zu verstehen. Angesichts Ihrer Frage und des von Ihnen geposteten Codes ist es für Sie zu früh, um Hibernate zu verwenden. Erlernen Sie zuerst die Grundlagen von Java und OO. Zum Beispiel sollten Sie wissen, dass ein Objekt nicht gleichzeitig Student und Laptop sein kann, und das ist es, was Ihr Code erwartet. –

+0

Vielen Dank für Ihre Hilfe das ist, was ich getan habe .. mein Problem zu lösen –

0
Iterator it = list.iterator(); 
    Object[] obj = list.toArray(); 
    while(it.hasNext()) 
    { 
     Object ob = (Object)it.next(); 
     Student s = (Student)ob; 
     System.out.println("Student id is "+s.getLid()); 
     Laptop l = s.getLaptop(); 
     System.out.println("laptop id is "+l.getLid()); 
     System.out.println("laptop name is "+l.getLname()); 
     Validity v = s.getValidity(); 
     System.out.println("Validity id is "+v.getLid()); 
     System.out.println("Validity Date is "+v.getValiditydate()); 

    }