2012-11-16 153 views
8

我有兩個類,用戶和汽車。兩者都有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(); 
} 

BTW我假定你有一些id場,但只是沒有告訴我們。也讓你的領域公開,所以你不需要爲每個領域寫getters/setters。

+0

我使用私人領域,因爲我有問題得到測試工作沒有getters/setters。 http://stackoverflow.com/questions/13011874/why-ebean-returns-null-for-no-reason –

+0

是的私人領域,你需要寫公共getter,這是正常的 – biesior

+0

顯然:-)但我的鏈接評論描述了我所指的Ebean/Play 2組合中的缺陷/功能。 –