2013-12-08 18 views
4

我讀http://www.avaje.org/ebean/introquery_joinquery.html;看例子A,我注意到沒有內連接公共列的規範。我認爲他們的fetch-tablename語法會導致Ebean查看2個表必須內聯的列。然後他們將每個結果存儲爲一個訂單?他們正在連接2​​個表,因此他們如何將客戶表中的列存儲爲一個訂單?內部連接如何在Ebean中工作?

我試着在代碼中用ebean進行內部連接,發現至少有一個假設是錯誤的。我有2張桌子,一張街道桌子和一張房子桌子(一對多關係)。 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' 

回答

6

我相信,你只需要直接引用表中where表達式列表,要求內部連接,是這樣的:

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

這是假設你有一個類似的房子實體設置:

@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; 

    ... 
} 
+0

什麼是「Ebean.find」中的「s.id」?如何使用「.eq(」street.id「,s.id)」將Ebean加入house.street_id = street.id中的House和Street? –

+0

「s」是此時提供的街道參數,它只是引用Street的id字段。 – jcreason