2011-01-13 10 views
1

私は、Javaでエンティティクラスを設定して、他のクラスと多対多の関係を持っています。しかし、エンティティコレクション全体を選択するのではなく、子エンティティからプロパティのみを選択したいと思います。これは、私の視点によっては必ずしもエンティティ全体が必要というわけではないので、システムにロードされるデータの量が少なくなるからです。休止状態の関係でエンティティからプロパティを選択する方法

これは私がこれまで持っているものです。

@Entity 
public class Disposition { 
... 
    @ManyToMany 
    private List<Project> projects; 
... 
} 

は、これが正常に動作し、プロジェクト・インスタンスのリストを取得します。しかし、私は処分のためのすべてのプロジェクトを手に入れたくありません。私はProject.nameを取得したいだけです。

これまで私が思いついた唯一の解決策は@Formulaアノテーションを使用していますが、HQLの代わりにネイティブSQLを記述する必要があるため、可能であればこれを避けたいと思います。

このビューは読み取り専用ですので、データを変更する必要はありません。

答えて

2

hqlを使用すると、子供の名前のみを取得できます。

"select p.name from Project p where p.parent_id = ?" 

のようになります。その中で変数名を調整し、?を置き換える必要がありますか?親のIDで。

この種の状況に合わせて調整されたDAOメソッドを使用するのが一般的です。

0

これは、オブジェクトリレーショナルマッピングがもうあなたを助けることができない場所です。しかし、Query APIを使用すると、任意のオブジェクトをSQLではなくHQLで照会することができます。 @FormulaはHQLも使用していませんか?

0

これはではなく、のHibernateですが、ebean projectはあなたを中断する可能性があります。 Ebeanは、JPAアノテーションを使用し、オブジェクトの遅延読み込みを可能にするORMプロジェクトです。あなたの例では

、唯一のプロジェクト名を取得すると、このコードにつながること:

List<Project> projects = Ebean.find(Project.class) 
    .select("name") // Only name properties are loaded 
    .where().eq("disposition", yourDisposition) 
    .findList(); 

次に、プロジェクトの所有者(または他のすべてのプロパティ)を取得しようとする場合は、プロパティがEbeanによって遅延ロードされます学位論文。

0

チェックアウトorg.hibernate.criterion.Projections。

criteria.setProjection(Projections.property("name")); 
:あなたは、単に次の操作を行うことができます条件を考えます
関連する問題