Ebean:如何在LEFT OUTER JOIN中过滤右表

时间:2014-02-25 12:52:00

标签: ebean

我想用这样的Ebean创建一个查询:

SELECT 
    t0.book_id, t0.name, t1.accno
FROM
    books t0
        LEFT OUTER JOIN
    external_refs t1 ON t0.book_id = t1.book_id AND t1.type = "doi"
WHERE
    t0.book_id in (1, 2, 3, 4)

实体“书”包含一对多关系

@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name="book_id", referencedColumnName = "book_id")
public List<ExternalRef> externalRefs;

这是我创建查询的方式:

List<Integer> bookIds;
Query<Book> query = Ebean.createQuery(Book.class).where(Expr.in("book_id", bookIds));

如何将部件AND t1.type = "doi"添加到此查询?

1 个答案:

答案 0 :(得分:0)

我认为无法改进您的查询以满足您的要求。但我构建了不同的结果,返回了期望的结果。这是代码:

Query<ExternalRef> queryER = Ebean.createQuery(ExternalRef.class).where(Expr.and (Expr.eq("type", "doi"), Expr.in("book.book_id", bookIds) ));

因此,我正在查询ExternalRefs而不是Books。