在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