2012-05-29 63 views
7

私はPlayFrameworkを使用しています。私は本当にそれを好きです。私はテーブルからデータを取得したい場合には、例えば私はuserテーブルを持って、私は次の構文を使用します。Play FrameworkとEbeanを使用した複雑な結合

List<User> users = User.find.where().eq("email", email).findList(); 

を私の質問は、私はユーザーオブジェクトを取得するとき、私はid列を持っているということです。そのidの値で私は他のテーブルにマップすることができ、そのテーブルのidをさらに多くのテーブルにマップすることができます。上記のような構文で実装する方法を説明している例や場所がありますか?

私は自分自身を見つけようとしましたが、現時点で私が考えることができるのは、私がむしろそうしない準備文を使ってストレートSQLを使うことだけです。モデル間の

Relationships@OneToManyのように、共通のJPAのアノテーションを使用して設定されているkalvish

答えて

16

ellou」、@ManyToOne@OneToOneなどユーザーの質問に対するユーザ・テーブルのUser.javaモデルとQuestion.javaモデルを持っているのであれば

のことができます@OneToManyでそれらを結合(持っている一つのUser多くQuestion秒)

ユーザー

@Entity 
public class User extends Model { 
    @Id 
    public Long id; 

    public String email; 

    @OneToMany 
    public List<Question> questions; 
} 

質問

@Entity 
public class Question extends Model { 
    @Id 
    public Long id; 

    public String question; 
} 

あなたは、コントローラ、Ebeanは、デフォルトでは「参加する」を実行しますで、ユーザーを選択しますし、同様にすべてのユーザーの質問を取得します:デフォルトでは

User user = User.find.where().eq("email", email).findUnique(); 
List<Question> usersQuestion = user.questions; 

Ebeanはすべてのオブジェクトのプロパティとリレーションをフェッチします。したがって、サブクエリを作成する必要はありません。もちろん、現時点で必要なデータだけを選択/フェッチすることもできます。あなたはかなり良いリファレンスガイド(PDF)を見つけることができますofficial Ebean documentation page

、関係の一般的な説明は、セクション11.6.2 Relationshipsで利用可能です。

セクション4.1.2 Queryでは、select()fetch()

+1

こんにちはマーカスを利用してお返事をありがとう「部分」オブジェクトを取得する方法を示す例(第2)があります。私は今マニュアルを見ていましたが、私はあなたにそれに関する質問をすることができるのだろうかと疑問に思っています...セクション4.1.5はOneToMany、ManyToOneなどを記述しています。 'myId'というカラムがあり、それが別のテーブルの' id'カラムにマップされているとします。それを指定する方法はありますか? – KVISH

+0

Ebeanは、モデルの変更時に適切なDDLを作成するのに十分な大きさです。実際にはこれに注意してください。他のテストプロジェクトを作成し、Ebeanから直接学んでください。 – biesior

+0

@KVISHあなたが探しているのはJPAアノテーション@ JoinColumnです。ここでジョインカラムの名前を指定できます使用する。 –

関連する問題