1

我需要一次显示一个包含大约 1300 个角色的大表。(我知道我应该使用数据滚动,但我的用户希望一次查看整个表格。)该表格显示 4 列。其中两列来自对象,而另外两列来自原始对象中的引用对象。我需要找到最好/有效的方法来做到这一点。我目前有这个工作,但是当我重新加载表时,它会出现内存不足的错误。我认为这是由内存中大量冗余数据引起的。

  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
    }

我需要从角色列表中显示的是:

角色 ID、角色名称、角色应用程序名称、角色应用程序数据库名称

4

1 回答 1

1

要明智地优化,请定义您将如何处理数据、查看或/和编辑。以下是一些常见的场景

  1. 使用惰性获取类型进行检索。使用 FetchType.LAZY 注释标记您在应用程序中的角色。

  2. 使用多选查询检索。创建您的自定义类(如 DTO)并使用多选查询从数据库中填充数据。(类似于 VIEW 映射为实体)

还有其他可能性,例如Shared (L2) Entity CacheRetrieval by Refresh

看看您是否正确使用 EntityManager读取我是否应该经常调用 EntityManager.clear() 以避免内存泄漏?.

于 2012-06-12T08:31:34.773 回答