在Play项目中,我有两种实体A
和B
,以及两个关系X
和Y
。 X
拥有A
实体和country
字段的夫妇,而Y
拥有混合A-B
对夫妇。实体B
也保存country
字段。我需要对A
进行查询,该查询告诉我A
是与X.country='US'
或Y
与Y.B.country='US'
的关系中的关系中的第二个实体。此查询的工作PostgreSQL的说法是:Ebean中的UNION运算符(或有效替代方法)
SELECT * FROM A WHERE A.id IN
(
(SELECT X.a2_id FROM X WHERE country = 'US')
UNION
(SELECT Y.a_id FROM Y WHERE b_id IN
(SELECT B.id FROM B WHERE B.country = 'US')
)
);
随着Ebean我设法让每个工作的子查询的,只是我错过了union
声明:
Query subqueryX = X.find.select("a2.id")
.where().eq("country","US").query();
Query subqueryY = Y.find.select("a.id")
.where().eq("b.country", "US").query();
List<A> result = A.find.where().in("id", subquery).findList();
这里,find
是play.db.ebean.Model.Finder<Id.class, Entity.class>
,像Play的计算机数据库模板。我想将这两个子查询合并到一个唯一的子查询中,以将它放入result
行的subquery
参数中。
我已经试图从subqueryX
和subqueryY
两个,然后使用ExpressionList<T>.in(String propertyName, Collection<?> values)
收集id
S,但后来我得到了java.sql.SQLException: Connection is closed!
如果Collection
变得太大(它通常是这样)。
有什么建议吗?
编辑
等待,也
List<A> result = A.find.where().in("id", subquery).findList();
失败,给我一个java.sql.SQLException: Connection is closed!
。所以这个问题开启了我如何在ebean中实现上面的SQL查询?
P.S.连接关闭时,在.in()
方法集合中约有32750个IDS ...
我设法让它直接执行'RawSql',但生成的查询返回完全错误的'findRowCount()'...这是一个错误还是我错过了一些东西? – davide 2014-11-21 13:19:24