7

私は PlayFramework を使用していますが、とても気に入っています。テーブルがある場合など、テーブルからデータを取得する場合はuser、次の構文を使用します。

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

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

私は自分自身を見つけようとしましたが、できませんでした。この時点で考えることができる唯一の方法は、私がしたくない準備済みステートメントでストレートSQLを使用することです。

4

1 に答える 1

16

エローカルビッシュ

Relationships@OneToManyモデル間は、@ManyToOne@OneToOne、 などの一般的な JPA アノテーションで設定されます。

したがってUser.java、ユーザーテーブルのQuestion.javaモデルとユーザーの質問のモデルがある場合は、それらを結合できます@OneToMany(One Userhas Many Questions)

ユーザー

@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 はすべてのオブジェクトのプロパティと関係をフェッチするため、サブクエリを作成する必要はありません。もちろん、現時点で必要なデータのみを選択/フェッチできます。

公式の Ebean ドキュメント ページには、非常に優れたリファレンス ガイド (pdf)があります。関係の一般的な説明は、セクション にあります11.6.2 Relationships

セクションには、と4.1.2 Queryを使用して「部分的な」オブジェクトを取得する方法を示す例 (2 番目) があります。select()fetch()

于 2012-05-29T07:01:22.547 に答える