1

一度に約1300の役割を持つ大きなテーブルを表示する必要があります。(データスクロールを使用する必要があることはわかっていますが、ユーザーはテーブル全体を一度に表示したいと考えています。)テーブルには4つの列が表示されます。これらの列のうち2つはオブジェクトからのものですが、他の2つは元のオブジェクトの参照オブジェクトからのものです。これを行うための最良/効率的な方法を見つける必要があります。私は現在これを機能させていますが、テーブルをリロードするとメモリ不足エラーが発生します。これは、メモリ内の大量の冗長データが原因だと思います。

  1. リポジトリが必要なフィールドのみに入力するビューオブジェクトを作成します。
  2. その他の提案。

オブジェクトは次のとおりです。

    public class Database extends EntityObject {
      private Long id;
      private String name;
      private String connectionString;
      private String username; 
      private String password;
      private String description;

      // getter and setters omitted
    }

    public class Application extends EntityObject {
      private Long id;
      private String name;
      private String fullName = "";
      private String description;
      private Database database;
      private List<Role> roles = new ArrayList<Role>(0);

      // getter and setters omitted
    }

    public class Role extends EntityObject {
      private Long id;
      private String name;
      private String nameOnDatabase;
      private Application application;

      // getter and setters omitted
    }

ロールのリストから表示する必要があるのは次のとおりです。

role.id、role.name、role.application.name、role.application.database.name

4

1 に答える 1

1

賢明に最適化するには、データをどのように処理するかを定義し、表示または編集します。一般的なシナリオは次のとおりです。

  1. レイジーフェッチタイプを使用した取得。FetchType.LAZYアノテーションを使用して、アプリケーションでの役割をマークします。

  2. 複数選択クエリを使用した取得。カスタムクラス(DTOなど)を作成し、複数選択クエリを使用してデータベースからのデータを入力します。(エンティティとしてマップされたVIEWに似ています)

共有(L2)エンティティキャッシュ更新による取得など、他の可能性もあります。

EntityManagerを正しく読んでいるかどうかを確認してください。メモリリークを回避するために、EntityManager.clear()を頻繁に呼び出すことになっていますか?

于 2012-06-12T08:31:34.773 に答える