在检索对象列表时,我想根据另一个只有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中添加所有属性?