2012-11-16 108 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组合中的缺陷/功能。 –