我在MySQL DB下使用Java Apache Cayenne。 我有一个很大的表,有一个bigint PK和一些字段。 我只想检索PK值而不是所有映射此实体的对象,因为它太耗费资源。
是否有可以使用的代码段,而不是检索所有对象的代码段?
ObjectContext context = ...
SelectQuery select = new SelectQuery(MyClass.class);
List<MyClass> result = context.performQuery(select);
答案 0 :(得分: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
答案 1 :(得分:0)
+1为Josemando的回答。如果您计划仅使用已获取对象的子集,则可以使用另一种方法:
ObjectContext context = ...
SelectQuery select = new SelectQuery(MyClass.class);
select.setPageSize(100);
List<MyClass> result = context.performQuery(select);
'setPageSize'确保'result'仅包含id,直到您尝试从列表中读取对象。当你这样做时,它将逐页解析它(在上面的例子中一次解决100个对象)。这可能适合许多场景。当然,如果你遍历整个列表,最终所有对象都将被完全解析,并且没有内存优势。