【问题标题】:foreign key query play! framework 2.+ ebean外键查询发挥!框架 2.+ ebean
【发布时间】:2013-07-31 22:03:50
【问题描述】:

我是新来玩框架和 Ebean ORM。

基本上,我有两个模型,一个是RegUsers,另一个是RegIds。在我的注册 ID 中,我在字段 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();

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

@(regs: List[RegId])

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

但我不知道如何只显示不同的记录。有没有办法使用 Ebean 来做到这一点,或者我需要编写原始 sql 吗?我将不胜感激任何帮助。

【问题讨论】:

    标签: java playframework playframework-2.0 ebean


    【解决方案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;
    }
    

    您可以像这样查询具有至少一个 RegIdRegUsers

    RegUsers.find.where().isNotNull("regIds.id").findList()
    

    如果您想找到RegUsers正好一个 RegId,那么您确实需要编写自定义 sql。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多