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

SelectQueryの代わりにSQLTemplateを使用してみてください。簡単な例を次に示します。

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

Josemandoの答えは+1。また、フェッチされたオブジェクトのサブセットのみを操作することを計画している場合に機能する可能性のある別の方法を次に示します。

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 に答える