如何只检索表的PK

时间:2012-12-03 16:21:00

标签: java mysql apache-cayenne

我在MySQL DB下使用Java Apache Cayenne。 我有一个很大的表,有一个bigint PK和一些字段。 我只想检索PK值而不是所有映射此实体的对象,因为它太耗费资源。

是否有可以使用的代码段,而不是检索所有对象的代码段?

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

2 个答案:

答案 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个对象)。这可能适合许多场景。当然,如果你遍历整个列表,最终所有对象都将被完全解析,并且没有内存优势。