外键查询播放!框架2. + ebean

时间:2013-07-31 22:03:50

标签: java playframework playframework-2.0 ebean

我是玩框架和Ebean ORM的新手。

基本上,我有两个模型,一个是RegUsers,另一个是RegIds。在我的注册中,我在Field RegUsers上建立了多对一的关系。说明,如果我没有弄错,一个用户可以有很多注册ID。

RegId型号:

@Entity 
public class RegId extends Model{
    public static Finder<Long,RegId> finder = new Finder<Long,RegId>(Long.class, RegId.class);

    @Id
    public Long id;

    @ManyToOne
    public RegUsers regUsers;

    public String regId;
}

RegUser型号:

@Entity 
public class RegUsers extends Model{

    public static Finder<Long,RegUsers> find = new Finder<Long,RegUsers>(Long.class, RegUsers.class);

    @Id
    public Long id;

    public String email;
    public String name;
}

RegId必须有RegUser,但RegUser不需要RegId。 对于我的一个观点,我试图仅显示RegUsers只有RegId一次的所有RegId,但无法弄清楚如何执行此操作。

我接近查询List<RegId> reg = RegId.finder.where().findList(); 表,如下所示:

@(regs: List[RegId])

@for(reg <- regs){
    <p>@reg.regUsers.email</p>
}

然后通过以下方式查询RegUser.name:

{{1}}

但我无法弄清楚如何只显示不同的记录。有没有办法使用Ebean这样做或我需要写原始的SQL?我将不胜感激任何帮助。

1 个答案:

答案 0 :(得分:1)

如果您在RegUsers定义中添加regIds字段,请执行以下操作:

@Entity 
public class RegUsers extends Model{

    public static Finder<Long,RegUsers> find = new Finder<Long,RegUsers>(Long.class, RegUsers.class);

    @Id
    public Long id;

    public String email;
    public String name;

    @OneToMany(mappedBy="regUsers")
    public Set<RegId> regIds;
}

您可以像这样查询至少一个 RegUsers的{​​{1}}:

RegId

如果你想找到RegUsers.find.where().isNotNull("regIds.id").findList() 恰好一个 RegUsers那么你需要编写自定义sql。