2012-12-03 20 views
0

我正在使用Java的Apache Cayenne,在MySQL DB下。 我有一個單一的bigint PK和一些領域相當大的表。 我想只檢索PK值,而不是檢索映射此實體的所有對象,因爲這太耗費資源。如何只檢索表中的PK

是否有我可以使用的代碼片段,而不是檢索所有對象的片段?

ObjectContext context = ... 
    SelectQuery select = new SelectQuery(MyClass.class); 
    List<MyClass> result = context.performQuery(select); 

回答

3

您應該嘗試使用SQLTemplate而不是SelectQuery。 這裏有一個簡單的例子:

ObjectContext context = ... 
SQLTemplate select = new SQLTemplate(MyClass.class, "SELECT #result('PK_COLUMN' 'long') FROM MY_TABLE"); 
List result = context.performQuery(select); 

你可以找到更多信息here

+0

完美,正是我在尋找的...... –

0

+1 Josemando的答案。這裏是另一種方式,可能的情況下工作,你打算只取對象的子集工作:

ObjectContext context = ... 
SelectQuery select = new SelectQuery(MyClass.class); 

select.setPageSize(100); 

List<MyClass> result = context.performQuery(select); 

「setPageSize」確保「結果」只包含IDS,直到您嘗試讀取對象列表。而當你這樣做的時候,它會逐頁解決它(在上面的例子中,每次100個對象)。這可能適合多種情況。當然,如果遍歷整個列表,最終所有對象都將被完全解析,並且不會帶來內存方面的好處。