2013-12-08 1 views
4

Я читаю http://www.avaje.org/ebean/introquery_joinquery.html; глядя на пример A, я заметил, что нет спецификации внутреннего столбца общего соединения. Я думаю, что их синтаксис fetch-tablename заставляет Ebean посмотреть, в каком столбце должны быть включены 2 таблицы для внутреннего соединения. Затем они сохраняют каждый результат как заказ? Они объединяют 2 таблицы, и как они могут хранить столбцы из таблицы клиентов в качестве ордера?Как внутренние соединения работают в Ebean?

Я попытался сделать внутреннее соединение с ebean в своем коде и обнаружил, что хотя бы одно из моих предположений было неправильным. У меня есть 2 таблицы, таблица улиц и таблица «Дом» (отношение «один ко многим»). Столбец street_id в таблице House является внешним ключом в столбце id таблицы Street. Я пытаюсь придумать Ebean эквивалент этого SQL:

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 ExpressionList требовать внутреннее соединение, что-то вроде:

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

Это предполагает, что у вас есть установка дом Entity похожее на это:

@Entity 
public class House extends Model { 

    @Id 
    public Long id; 

    @ManyToOne 
    public Street street; 

    ... 
} 

И уличный Entity вроде этого:

@Entity 
public class Street extends Model { 

    @Id 
    public Long id; 

    @OneToMany(mappedBy = "street") 
    public List<House> houses; 

    ... 
} 
+0

Что такое "s.id" в категории "Ebean.find"? Как использовать «.eq (« street.id », s.id)» будет ли Ebean присоединиться к дому и улице на house.street_id = street.id? –

+0

«s» - это параметр Street, предоставленный на этом этапе, и он просто ссылается на поле id улицы. – jcreason