1

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

有没有我可以使用的片段,而不是检索所有对象的片段?

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

2 回答 2

3

您应该尝试使用 SQLTemplate 而不是 SelectQuery。这是一个简单的例子:

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

你可以在这里找到更多信息

于 2012-12-03T17:34:57.593 回答
0

+1 为 Josemando 的回答。如果您打算只使用获取的对象的子集,这是另一种可行的方法:

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

select.setPageSize(100);

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

'setPageSize' 确保 'result' 仅包含 id,直到您尝试从列表中读取对象。当您这样做时,它将逐页解析(在上面的示例中一次 100 个对象)。这可能适合许多场景。当然,如果你遍历整个列表,最终所有对象都会被完全解析,并且不会有内存收益。

于 2012-12-03T17:51:58.567 回答