2013-05-02 1 views
5

以下のクエリがあると、Productのリストが表示されます。ハイバネートクエリの結合で返されるオブジェクトタイプは何ですか

List<Product>= 

getCurrentSession().createQuery("SELECT p FROM Product p ").list(); 

次のような結合がある場合、どのような結果が返されますか?

getCurrentSession().createQuery("SELECT p FROM Product p inner join ProductCategory pc where p.id=pc.id").list(); 
+1

リストが届きます。 – prasanth

+2

あなたはそれを自分で試して、それが何を返すのか見てみませんか?それは本当に難しいですか? – SudoRahul

答えて

3

SELECT p FROM Product p inner join ...何かにそれらをキャストする必要があります。

FROM Product p inner join ...これはあなたに配列のリストを提供します。

+0

その理由は何ですか? –

+1

両方がテーブルを結合していますが、1番目のテーブルは明示的にProductのみを返すように指定しています。 –

1

これはオブジェクトのlistを返します。あなたはそれがあなたにProduct秒のリストを与えるようProduct

List list = session.createQuery("SELECT p FROM Product p inner 
         join ProductCategory pc where p.id=pc.id").list(); 
0

javax.persistence.Queryのドキュメントによれば、Listを取得することになります。なぜあなたはそれが違うべきだと思いますか?

2

結果としてList<Object[]>を返す必要があります。 thisスレッド

を参照してくださいそして、あなたは、java.lang.Objectからはモデルクラスにこのクラスのキャストは任意の方法では動作しません

for (Object[]> result : query.list()) { 
    Product p = (Product) result[0]; 
    ProductCategory pc = (ProductCategory) result[1]; 
} 
0

のようなあなたのエンティティにアクセスする必要があります。以下は私のコードです。

List<Contactinfo> listStudentInfo = new ArrayList<Contactinfo>();      
         //listStudentInfo = dataService.getAllStudent(studentInfo); 
         listStudentInfo = dataService.getStudentInfo(); 
         System.out.println(listStudentInfo.size()); 
         Contactinfo contactinfo = (Contactinfo)listStudentInfo.get(0); 

しかし、休止状態で

、あなたは両方のエンティティは、@で関連付けられている場合は加入する必要はありません多く対1または1対1の参加の注釈@。次に、1つのオブジェクトだけを選択する必要がある場合、自動的に結合を介して他のオブジェクトにアクセスします。結合フィールドにはgetter()、setter()メソッドを保持してください。これが状況を明確にすることを願っています。

関連する問題