Как получить только PK таблицы

Я работаю с Java Apache Cayenne, под БД MySQL. У меня довольно большая таблица с одним bigint PK и некоторыми полями. Я хотел бы получить только значения PK, а не весь объект, который отображает эту сущность, так как это было бы слишком ресурсоемким.

Есть ли фрагмент, который я могу использовать вместо этого, который извлекает все объекты?

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

2 ответа

Решение

Вы должны попробовать использовать SQLTemplate вместо SelectQuery. Вот быстрый пример:

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

Вы можете найти больше информации здесь

+1 за ответ Жоземандо. И вот еще один способ, который может работать, если вы планируете работать только с подмножеством извлеченных объектов:

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

select.setPageSize(100);

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

'setPageSize' гарантирует, что 'result' содержит только идентификаторы, пока вы не попытаетесь прочитать объект из списка. И когда вы это сделаете, он будет решать его постранично (100 объектов за раз в приведенном выше примере). Это может соответствовать ряду сценариев. Конечно, если вы выполните итерацию по всему списку, в конечном итоге все объекты будут полностью разрешены, и не будет никакого преимущества для памяти.

Другие вопросы по тегам