2010-12-02 19 views
4

を選択休止状態でオブジェクトを作成します。HQLで私は2クラス持っ

class A { 
B b; 

public A() {} 
public A(B b) { setB(b); } 
... 
} 

class B { 
int id; 
public B(int id) { setId(id); } 
} 

を、私はこのように選択する:

select new A(new B(a.b.id)) from A a 

が、私はエラー

org.hibernateを得ました。 hql.PARSER - 行1:48:予期しないトークン:、

パラメータでオブジェクトを作成することは可能ですか、フィールドだけを選択してコンストラクタ内に作成できますか?

+0

正確に何をしますか?なぜあなたはここで 'new'を使う必要がありますか?' SELECT a ... 'をやってみませんか?このクラスの – axtavt

+0

はより多くのフィールドであり、それらを選択したくありません。 – Dainius

+0

魔法使い "Aから新しいA(a.b.id)を選択する" "hibernateはそのフィールドだけを選択し、他のeagerフィールドは選択しません。私が望むのはint値の代わりにオブジェクトを得ることです。しかし、Bにも私が必要としないいくつかの熱心なフィールドですので、私は完全なBオブジェクトを取得したくないです。 – Dainius

答えて

1

あなたが達成したいことを正確に理解しているかどうかはわかりません。

select a.whatever, b.id from A a join a.b b 

その後あなたがインターフェイスResultTransformerの実装を提供し、query.setResultTransformer(yourTransformer)であなたのqueryオブジェクトに設定します。しかし、あなたは同様に、あなたがinteresetている列に対してのみクエリに(突起部を含む)HQLクエリーを作成することができます

結果変圧器の実装では、多分あなたのクエリやStrinBuilderクラスの使用を構築するために、独自の関数を書くに見A

+1

このクエリは、何でもidのリストを返すだけです。オブジェクトAリストが必要ですが、Aが大きく、他のオブジェクトとの関係が多い場合、このAを選択するには何度かかかります。いくつかの関連するオブジェクトからほんのわずかのフィールドで、Aのリストが必要な場合もあります。私はそれを "AからAを選択する"ことができますが、それは完全なBオブジェクトを選択するよりも、私はそれからidだけを必要とします。したがって、最良のクエリは "新しいAを選択します(a.whatever 、Aからの新しいB(abid) "しかし、休止状態はそれを許さない。そのために、私は必要なフィールドだけで他のクラスを作成する必要がある。 – Dainius

1

Bのインスタンスを作成するための責任がある - 私はhql.append使用しますクエリを書くのnstead!

import org.hibernate.Hibernate; import org.hibernate.search.FullTextQuery; import org.hibernate.search.FullTextSession; import org.hibernate.search.Search;

確かに分かりませんが、それ以外の場合は、サイクロスのウェブアプリをチェックしてください。たくさんのクエリやjavaファイルが含まれています。そのオープンソースで完全な休止状態を使用

について

関連する問題