2013-05-16 36 views
0

我當前的查詢是下面,它的單用戶正常工作:如何創建活動對象「IN」條件查詢

1 
ao.find(da.class, Query.select().where("user=?",user) 

現在,我要改變這個查詢到如下獲取多用戶的數據,但它沒有工作,並給我無效的列名稱。

1 
ao.find(da.class, Query.select().where("user IN (?)",user) 

另外,嘗試應用單個qutoes。即使單個用戶進入參數值也沒有工作,並給出相同的錯誤。

任何人都可以告訴我最新的錯誤,並在這裏糾正?

錯誤的,

Caused by: java.sql.SQLException: Column not found: user in statement [SELECT * FROM  PUBLIC.AO_0371A8_da WHERE "user" IN (?)] 
at org.hsqldb.jdbc.Util.throwError(Unknown Source) 
at org.hsqldb.jdbc.jdbcPreparedStatement.<init>(Unknown Source) 
at org.hsqldb.jdbc.jdbcConnection.prepareStatement(Unknown Source) 
at org.apache.tomcat.dbcp.dbcp.DelegatingConnection.prep 

OR時 - '?' 在哪裏(「拿來主義 」()「,並驗證其單用戶

at java.lang.Thread.run(Thread.java:662) 
Caused by: java.sql.SQLException: Column not found: user in statement [SELECT * FROM  PUBLIC.AO_0371A8_da WHERE "user" IN ('?')] 
at org.hsqldb.jdbc.Util.throwError(Unknown Source) 
at org.hsqldb.jdbc.jdbcPreparedStatement.<init>(Unknown Source) 
at org.hsqldb.jdbc.jdbcConnection.prepareStatement(Unknown Source) 
at org.apache.tomcat.dbcp.dbcp.DelegatingConnection.prepareState 

謝謝

回答

0

有兩個問題。

您無法從IN數據庫中檢索多個行,只有一個參數在IN子句中。相當於第一個查詢。對於需要IN(?,?)的兩個用戶,需要IN(?,?,?)的三個用戶。

第二個查詢給出的錯誤可能是因爲列名是USER。爲您的變量和數據庫列嘗試一個不同的名稱。

當您要求解決問題時,請始終報告錯誤。

如果您不能更改它,您可能會引用用戶字段名稱。但是我不知道ORM是否改變了哪裏的字符串。

ao.find(da.class, Query.select().where("\"USER\" IN (?)",user) 
+0

有沒有辦法讓它不改變「用戶」領域的工作,它的正常工作使用第一查詢單個用戶。但不適用於多用戶通過 - 「用戶IN(?)」,userparam),userparam具有多個值 - 「user1,user2,user3」 – dsi

+0

已更新答案 – fredt

1

如果你想使用IN查詢,你需要自己構造佔位符列表。下面是取自一個片段:https://ecosystem.atlassian.net/browse/AO-263?focusedCommentId=69495&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-69495

MyEntity[] findEntities(Iterable<String> matchValues) { 
    String placeholderCommaList = Joiner.on(", ").join(Iterables.transform(matchValues, Functions.constant("?"))); 
    Object[] matchValuesArray = Iterables.toArray(matchValues, Object.class); 
    return ao.find(MyEntity.class, "primary_key_field_name", Query.select().where("match_field_name IN (" + placeholderCommaList + ")", matchValuesArray)); 
} 

這一點很重要,那佔位符的數量(「?」)相匹配的參數的個數。

希望這有助於

+0

這適用於魅力。謝謝雷莫! –