Как получить только 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 объектов за раз в приведенном выше примере). Это может соответствовать ряду сценариев. Конечно, если вы выполните итерацию по всему списку, в конечном итоге все объекты будут полностью разрешены, и не будет никакого преимущества для памяти.