2012-11-16 11 views
8

私は2つのクラス、ユーザーと車を持っています。どちらもManyToManyを互いにマッピングしています。Ebean ManyToManyクエリ

ユーザー:

@Entity 
public class User extends Model { 

    private int year; 

    @ManyToMany(cascade=CascadeType.ALL) 
    private List<Car> cars; 
} 

車:

@Entity 
public class Car extends Model { 
    @ManyToMany(mappedBy = "cars", cascade=CascadeType.ALL) 
    private List<User> users; 
} 

ebeanを使用して、私は自分のリストにユーザーを与える必要があり、1999年からこれらの車を照会したいと思います。 Javaコードでユーザーの車リストを繰り返し処理したくない

多対多クエリがどのように表示されるかのドキュメントは見つかりませんでした。ですから、私は次のようになります:

public List<Car> findCars(int year, User user) { 
    return Car.find.where().eq("year", int).eq("users", user).findList(); 
} 

これはEbeanで可能ですか?

答えて

11

チェックと同様のquestion (and answer)

は、おそらくあなたのファインダーは、次のようになります。

public List<Car> findCars(int year, User user) { 
    return find.where().eq("year", year).eq("users.id", user.id).findList(); 
} 

ところで私はあなたには、いくつかのidフィールドを持っていることを前提としていますがちょうど私達を示しませんでした。また、フィールドをパブリックにするため、それぞれにgetter/setterを記述する必要はありません。

+0

私はゲッター/セッターなしでテストを行うことに問題があったため、プライベートフィールドを使用していました。 http://stackoverflow.com/questions/13011874/why-ebean-returns-null-for-no-reason –

+0

はい、プライベートフィールドでは、public getterを書く必要があります。それは普通です – biesior

+0

明らかに:-)しかし、私のリンクコメントは、私が参照していたEbean/Play 2コンボのバグ/機能を説明しています。 –

関連する問題