【问题标题】:Inner joins in Ebean?在Ebean内部加入?
【发布时间】:2013-12-08 18:46:45
【问题描述】:

我读到https://archive-avaje-org.github.io/ebean/introquery_joinquery.html 查看示例 A,我注意到没有内连接公共列的规范。我认为他们的 fetch-tablename 语法会导致 Ebean 查看 2 个表必须内部连接的列。然后他们将每个结果存储为订单?他们正在连接 2 个表,那么他们如何将客户表中的列存储为订单?

我尝试在我的代码中使用 ebean 进行内部连接,但发现至少我的一个假设是错误的。我有 2 张桌子,一张 Street 桌子和一张 House 桌子(一对多关系)。 House 表中的 street_id 列是 Street 表的 id 列的外键。我正在尝试提出与此 sql 等效的 Ebean:

SELECT s.name, h.owner, h.isSubscriber FROM Street as s INNER JOIN House as h WHERE     
h.street_id=s.id AND h.isNew='false'

【问题讨论】:

    标签: playframework playframework-2.0 ebean


    【解决方案1】:

    我相信您只是直接在 where ExpressionList 中引用该表来要求内部连接,例如:

    Ebean.find(House.class)
         .select("street.name, owner, isSubscriber")
         .where()
         .eq("street.id", s.id)
         .eq("isNew", false)
         .findList();
    

    这假设您有一个类似于此的 House Entity 设置:

    @Entity 
    public class House extends Model {
    
        @Id 
        public Long id;
    
        @ManyToOne
        public Street street;
    
        ...
    }
    

    还有这样的街道实体:

    @Entity 
    public class Street extends Model {
    
        @Id 
        public Long id;
    
        @OneToMany(mappedBy = "street")
        public List<House> houses;
    
        ...
    }
    

    【讨论】:

    • “Ebean.find”中的“s.id”是什么?如何使用 ".eq("street.id", s.id)" Ebean 在 house.street_id = street.id 上加入 House 和 Street?
    • "s" 是此时提供的 Street 参数,它只是引用 Street 的 id 字段。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 2018-12-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多