小编foo*_*bar的帖子

Ebean使用其他表过滤findList结果

在检索对象列表时,我想根据另一个只有ID的表来过滤结果.对象在ORM模型中没有链接,而只是包含一个UUID.

即:

@Entity
class A {
    @Id
    private UUID id;
    private UUID refB; // links to B
}

@Entity
class B {
    @Id
    private UUID id;
    private boolean visible;
}
Run Code Online (Sandbox Code Playgroud)

我想检索B.hidden为假或其中B不存在的所有A.

在SQL中我会做类似的事情

SELECT t0.* FROM a_table t0 LEFT JOIN b_table t1 ON (t0.ref_b = t1.id)
    WHERE t1.hidden IS NULL OR t1.hidden = 0;
Run Code Online (Sandbox Code Playgroud)

我不仅仅使用RawSql的原因是我找不到任何方法在select中使用通配符,因此所有属性都必须在select中进行维护和手动添加.

我也试过了

List<A> listA = Ebean.find(A.class).where()
     .join("LEFT JOIN b_table t1 ON (t0.ref_b = t1.id)")
     .where().in("t1.hidden", "0", "NULL");
Run Code Online (Sandbox Code Playgroud)

但后来我得到一个错误,因为在"LEFT JOIN"之前放置了WHERE.

我认为"正确"的方式是将"私有UUID refB"替换为"私有B refB".但这样做可以更容易规避某些安全措施.

这是可能的还是我必须在RawSql中添加所有属性?

join filter ebean

1
推荐指数
1
解决办法
4374
查看次数

标签 统计

ebean ×1

filter ×1

join ×1