2017-06-24 3 views
0

私はいくつかの助けが必要です。私は休止状態には新しいものがあります。私は内側のジョインを使って3つのテーブルに参加しました。すべてが1対1のマッピングを持っています。リストで結果を得ています。リスト。私はイテレータを使用しようとしましたが、何も助けてくださいここでコードスニペットを助けてください。私はインナーhqlと反復するには

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()); 

    } 

答えて

1

あなたのクエリを発射しています

@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 

クエリは

Select s from Student s where ... 

だから、それは学生のインスタンスを選択しています。

したがって、結果はList<Student>であり、List<Object[]>ではありません。

は右のタイプを使用し、使用がクエリ型付け:

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

をしかし、私はラップトップクラスの詳細と、妥当性クラス –

+0

をしたいそして、それは、学生がノートパソコンや妥当性のフィールドを持っている良いことです。そしてstudent.getLaptop()を使って生徒のラップトップを取得することができます。あなたはクラスとオブジェクトの原則を理解するとは思わない。あなたの質問と投稿したコードを考えると、私はあなたがHibernateを使うのは早すぎると思います。 JavaとOOの基礎を学びましょう。たとえば、オブジェクトは同時にStudentとLaptopの両方になることはできませんが、それはあなたのコードが想定しているものです。 –

+0

これは私がやったことです。 –

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()); 

    }